How to implement Image Gallery in Gridview in android?

前端 未结 5 455
青春惊慌失措
青春惊慌失措 2020-11-28 10:22

I have a requirement in that I want to implement an image gallery with a GridView. I tried using Hello gallery on the Android developer website. But the GridView doesn\'t wo

相关标签:
5条回答
  • 2020-11-28 10:34

    See this hello-gridview. For more reference see this also

    • gallery-into-grid-style-menu
    • image-gallery-with-checkbox-in-grid-to-select-multiple/
    • add-capture-button-and-update-gallery/

    I think the above links are very useful to you. And keep in mind before posting question you first check out android developer. This will provide all most all information about Android. If you're still getting any problem then let me know

    0 讨论(0)
  • 2020-11-28 10:45

    Use this XML for Layout : gallery.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:background="@drawable/bg_child">
    
        <FrameLayout android:id="@+id/FrameLayout01"
            android:layout_width="fill_parent" android:layout_height="fill_parent">
            <FrameLayout android:id="@+id/LinearLayout01"
                android:layout_gravity="top" android:layout_height="50dp" android:layout_width="fill_parent">
                <TextView android:id="@+id/TextView01"
                    android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:layout_gravity="center_vertical" android:layout_marginLeft="30dp" android:gravity="center_vertical" android:drawableLeft="@drawable/photo_frame" android:textColor="@color/grey" android:text="@string/photogallery_txt"></TextView>
                <Button android:layout_gravity="right" android:id="@+id/btnMoreInfo" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:textStyle="bold" android:background="@drawable/my_child_button" android:layout_width="100dp" android:layout_height="40dp" android:text="@string/moreinfo_txt"></Button>
            </FrameLayout>
            <GridView xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/gridview" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:columnWidth="90dp"
                android:numColumns="auto_fit" android:verticalSpacing="10dp"
                android:horizontalSpacing="10dp" android:stretchMode="columnWidth"
                android:gravity="center" android:layout_gravity="bottom"
                android:layout_marginTop="50dp"></GridView>
        </FrameLayout>
    </LinearLayout>
    

    Activity File GalleryPage.java

    public class GalleryPage extends Activity {
    
        // private Integer[] mImageIds = {R.drawable.splash, R.drawable.splash,
        // R.drawable.splash, R.drawable.splash, R.drawable.splash,
        // R.drawable.splash, R.drawable.splash};
    
        private static Uri[] mUrls = null;
        private static String[] strUrls = null;
        private String[] mNames = null;
        private GridView gridview = null;
        private Cursor cc = null;
        private Button btnMoreInfo = null;
        private ProgressDialog myProgressDialog = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
    
            CommonFunctions.setLanguage(getBaseContext());
    
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.gallery);
            btnMoreInfo = (Button) findViewById(R.id.btnMoreInfo);
            // It have to be matched with the directory in SDCard
            cc = this.getContentResolver().query(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,
                    null);
    
            // File[] files=f.listFiles();
            if (cc != null) {
    
                myProgressDialog = new ProgressDialog(GalleryPage.this);
                myProgressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                myProgressDialog.setMessage(getResources().getString(R.string.pls_wait_txt));
                //myProgressDialog.setIcon(R.drawable.blind);
                myProgressDialog.show();
    
                new Thread() {
                    public void run() {
                        try {
                            cc.moveToFirst();
                            mUrls = new Uri[cc.getCount()];
                            strUrls = new String[cc.getCount()];
                            mNames = new String[cc.getCount()];
                            for (int i = 0; i < cc.getCount(); i++) {
                                cc.moveToPosition(i);
                                mUrls[i] = Uri.parse(cc.getString(1));
                                strUrls[i] = cc.getString(1);
                                mNames[i] = cc.getString(3);
                                //Log.e("mNames[i]",mNames[i]+":"+cc.getColumnCount()+ " : " +cc.getString(3));
                            }
    
                        } catch (Exception e) {
                        }
                        myProgressDialog.dismiss();
                    }
                }.start();
             gridview = (GridView) findViewById(R.id.gridview);
             gridview.setAdapter(new ImageAdapter(this));
    
             gridview.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View v,
                      int position, long id) {
                   Intent i = new Intent(GalleryPage.this, BigImage.class);
                   Log.e("intent : ", ""+position);
                   i.putExtra("imgUrls", strUrls);
                   i.putExtra("position", position);
                   startActivity(i);
                }
             });
    
            }
    
            btnMoreInfo.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent i = new Intent(GalleryPage.this, ChildLogin.class);
                    startActivity(i);
                }
            });
        }
    
        /**
         * This class loads the image gallery in grid view.
         *
         */
        public class ImageAdapter extends BaseAdapter {
            private Context mContext;
    
            public ImageAdapter(Context c) {
                mContext = c;
            }
    
            public int getCount() {
                return cc.getCount();
            }
    
            public Object getItem(int position) {
                return null;
            }
    
            public long getItemId(int position) {
                return 0;
            }
    
            // create a new ImageView for each item referenced by the Adapter
            public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.galchild, null);
    
                try {
    
                    ImageView imageView = (ImageView) v.findViewById(R.id.ImageView01);
                    //imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                    // imageView.setPadding(8, 8, 8, 8);
                    Bitmap bmp = decodeURI(mUrls[position].getPath());
                    //BitmapFactory.decodeFile(mUrls[position].getPath());
                    imageView.setImageBitmap(bmp);
                    //bmp.
                    TextView txtName = (TextView) v.findViewById(R.id.TextView01);
                    txtName.setText(mNames[position]);
                } catch (Exception e) {
    
                }
                return v;
            }
        }
    
        @Override
        protected void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
            FlurryAgent.onStartSession(this, "***");
        }
        // @Override
        // protected void onStop() {
        // TODO Auto-generated method stub
        // super.onStop();
        // FlurryAgent.onEndSession(this);
    
        // }
    
        /**
         * This method is to scale down the image 
         */
        public Bitmap decodeURI(String filePath){
    
            Options options = new Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(filePath, options);
    
            // Only scale if we need to 
            // (16384 buffer for img processing)
            Boolean scaleByHeight = Math.abs(options.outHeight - 100) >= Math.abs(options.outWidth - 100);
            if(options.outHeight * options.outWidth * 2 >= 16384){
                // Load, scaling to smallest power of 2 that'll get it <= desired dimensions
                double sampleSize = scaleByHeight
                    ? options.outHeight / 100
                    : options.outWidth / 100;
                options.inSampleSize = 
                    (int)Math.pow(2d, Math.floor(
                    Math.log(sampleSize)/Math.log(2d)));
            }
    
            // Do the actual decoding
            options.inJustDecodeBounds = false;
            options.inTempStorage = new byte[512];  
            Bitmap output = BitmapFactory.decodeFile(filePath, options);
    
            return output;
        }
    }
    
    0 讨论(0)
  • 2020-11-28 10:52
    private static final int SELECT_PHOTO = 100;
    ImageView image;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        image = (ImageView) findViewById(R.id.imageView2);
    }
    
    public void pickAImage(View view) {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, SELECT_PHOTO);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    
        switch (requestCode) {
            case SELECT_PHOTO:
                if (resultCode == RESULT_OK) {
                    Uri selectedImage = imageReturnedIntent.getData();
                    InputStream imageStream = null;
    
                    try {
                        imageStream = getContentResolver().openInputStream(selectedImage);
                    } 
                    catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
    
                    Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
                    image.setImageURI(selectedImage);// To display selected image in image view
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-28 10:54

    This tutorial Hello Grid View provide a good basic example on creating Image Gallery with gridview, but the image are from drawable resource, you need to expand it as your requirement need.

    0 讨论(0)
  • 2020-11-28 10:59

    Looks like you want custom gallery, it will take much time for you,

    I suggest you get Custom Camera Gallery library for your working.

    You will get Photos/Videos in Grid View as you want.

    0 讨论(0)
提交回复
热议问题