Android:GridView

来源:互联网 发布:海通大智慧下载软件 编辑:程序博客网 时间:2024/06/01 13:38

main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="fill_parent"              android:layout_height="fill_parent"              android:weightSum="1">    <GridView            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:id="@+id/gridView" android:layout_weight="1.07"            android:numColumns="3"  //3列!!            android:smoothScrollbar="false"            android:choiceMode="multipleChoice" android:clickable="true"/></LinearLayout>

gridview.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:layout_height="match_parent" android:weightSum="1">    <ImageView            android:layout_width="106dp"            android:layout_height="144dp"            android:id="@+id/imageView"/></LinearLayout>

activity:

package com.example.GridView;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.*;import android.content.*;import android.view.*;import android.graphics.*;public class GridViewActivity extends Activity {    /**     * Called when the activity is first created.     */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        GridView gv = (GridView)findViewById(R.id.gridView);        ManateeAdapter adapter = new ManateeAdapter(this);        gv.setAdapter(adapter);    }    public static class ManateeAdapter extends BaseAdapter {        private LayoutInflater mInflater;        private Context mContext;        static class ViewHolder {            ImageView image;        }        private int[] manatees = {R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,                R.drawable.f,R.drawable.g,R.drawable.h,R.drawable.i};        private Bitmap[] manateeImages = new Bitmap[manatees.length];        private Bitmap[] manateeThumbs = new Bitmap[manatees.length];        @Override        public int getCount() {            return manatees.length;        }        @Override        public Object getItem(int position) {            return manatees[position];        }        @Override        public long getItemId(int position) {            return position;        }        /*        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder;            if (convertView == null) {                convertView = mInflater.inflate(R.layout.gridview, null);                holder = new ViewHolder();                holder.image = (ImageView) convertView.findViewById(R.id.imageView);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            holder.image.setImageBitmap( manateeThumbs[position] );            return convertView;        }        */         public View getView(int position, View convertView, ViewGroup parent) {            ImageViewExt imageView;            if (convertView == null) {                imageView = new ImageViewExt(mContext);                // 如果是横屏,GridView会展示4列图片,需要设置图片的大小                if (imageCol == 4) {                    imageView.setLayoutParams(new GridView.LayoutParams(                            dm.heightPixels / imageCol - 6, dm.heightPixels                            / imageCol - 6));                } else {// 如果是竖屏,GridView会展示3列图片,需要设置图片的大小                    imageView.setLayoutParams(new GridView.LayoutParams(                            dm.widthPixels / imageCol - 6, dm.widthPixels                            / imageCol - 6));                }                imageView.setAdjustViewBounds(true);                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);            } else {                imageView = (ImageViewExt) convertView;            }            imageView.setImageResource(ImageSource.mThumbIds[position]);            return imageView;        }        public ManateeAdapter(Context context) {            this.mContext = context;            mInflater = LayoutInflater.from(context);            for(int i=0; i<manatees.length; i++) {                manateeImages[i] = BitmapFactory.decodeResource(                        context.getResources(), manatees[i]);                manateeThumbs[i] = Bitmap.createScaledBitmap(manateeImages[i],                        100, 100, false);            }        }    }}
public class ImageViewExt extends ImageView {    //将图片加灰色的边框    private int color;    public ImageViewExt(Context context) {        super(context);        // TODO Auto-generated constructor stub        color=Color.GRAY;    }    public ImageViewExt(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub        color=Color.GRAY;    }    //画上边框    @Override    protected void onDraw(Canvas canvas) {        // TODO Auto-generated method stub        super.onDraw(canvas);        //画边框        Rect rec=canvas.getClipBounds();        rec.bottom--;        rec.right--;        Paint paint=new Paint();        paint.setColor(color);        paint.setStrokeWidth(5);        paint.setStyle(Paint.Style.STROKE);        canvas.drawRect(rec, paint);    }}
public class ImageSource {    static Integer[] mThumbIds = {            R.drawable.mov11,            R.drawable.mov12,            R.drawable.mov13,            R.drawable.mov14,            R.drawable.mov15,            R.drawable.mov16,            R.drawable.mov17,            R.drawable.mov18,            R.drawable.mov19,            R.drawable.mov20    };}

///////////////////////////////////////////////////////////////////////////////////////////////
访问本地DCIM/Camera目录下的所有图片,并显示出来。
注意user-permission加上WRITE_EXTERNAL_STORAGE,不然一直显示文件不存在

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这里直接在文件夹里找并显示。回头需要看异步显示的方式,因为图片很多的话,扫描很慢,显示也很慢~

package com.example.GridView;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.ViewGroup;import android.widget.*;import android.content.*;import android.view.*;import android.graphics.*;import android.database.*;import android.os.Handler;import android.util.Log;import android.media.ThumbnailUtils;import java.io.*;import java.util.ArrayList;import java.util.List;public class GridViewActivity extends Activity {    String TAG = "GridViewAPP";    ContentObserver mDbObserver;    Handler mHandler = new Handler();    Thread mWorkerThread;    ArrayList<Bitmap> a;    ManateeAdapter adapter;    //ManateeAdapter    @Override    public void onStart() {        super.onStart();        Log.e(TAG,"onStart!!");        GridView gv = (GridView)findViewById(R.id.gridView);        adapter = new ManateeAdapter(this);        gv.setAdapter(adapter);        /*        getContentResolver().registerContentObserver(                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,                true, mDbObserver);        */        startWorker();    }    private void startWorker() {        workerRun();        /*        mWorkerThread = new Thread("GalleryPicker Worker") {            @Override            public void run() {                workerRun();            }        };        */        //mWorkerThread.start();    }    private void workerRun() {        String path = "/mnt/sdcard/DCIM/Camera";        File file = new File(path);        if(!file.exists()){            Log.e("TAG",path +" dosn't exists");        }else{            File[] files = file.listFiles();            String[] paths = new String[files.length];            Bitmap bitmap;            Bitmap newBitmap;            for (int i = 0; i < files.length; i++) {                paths[i] = files[i].getPath();                try {                    BitmapFactory.Options options = new BitmapFactory.Options();                    options.inSampleSize = 10;                    bitmap = BitmapFactory.decodeFile(paths[i], options);                    newBitmap = ThumbnailUtils.extractThumbnail(bitmap,                            120, 120);                    Log.e("TAG","files path  = " + paths[i]);                    adapter.addBitmap(newBitmap);                    bitmap.recycle();                } catch (Exception e) {                    e.printStackTrace();                }            }        }    }    /**     * Called when the activity is first created.     */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        Log.e(TAG,"GridView APP Started!");        mDbObserver = new ContentObserver(mHandler) {            @Override            public void onChange(boolean selfChange) {                Log.e(TAG,"Db changed!!!!!");            }        };        //ActionBar actionBar = getActionBar();        //actionBar.hide();    }    public static class ManateeAdapter extends BaseAdapter {        private LayoutInflater mInflater;        private Context mContext;        public ArrayList<Bitmap> b = new ArrayList<Bitmap>();        @Override        public int getCount() {            return b.size();        }        @Override        public Object getItem(int position) {            return b.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ImageView imageView;            Log.e("TAG","getView position = " + position);            Log.e("TAG","ArrayList size = " + b.size());            if (convertView == null) {                convertView = mInflater.inflate(R.layout.gridview, null);                imageView = (ImageView) convertView.findViewById(R.id.imageView);                imageView.setImageBitmap(b.get(position));            } else {                Log.e("TAG","getView convertView!=0");            }            return convertView;        }        public void updateDisplay(){            notifyDataSetChanged();        }        public void addBitmap(Bitmap t){            //Log.e("TAG","Bitmap size = "+b.size());            b.add(t);        }        public ManateeAdapter(Context context) {            this.mContext = context;            mInflater = LayoutInflater.from(context);            /*            for(int i=0; i<manatees.length; i++) {                manateeImages[i] = BitmapFactory.decodeResource(                        context.getResources(), manatees[i]);                manateeThumbs[i] = Bitmap.createScaledBitmap(manateeImages[i],                        100, 100, false);            }            */        }    }}

AsyncTask异步加载的例子,顺便看一下AsyncTask

http://blog.csdn.net/shouliang52000/article/details/7636232

0 0
原创粉丝点击