Android:我无法将手机图像显示在GridView中

时间:2016-08-30 09:36:37

标签: java android gridview

我已经实现了Gridview,但是电话库中的图像没有出现在特定的GridView中。 滚动似乎足够大,因为右侧出现的滚动条会向下滚动到底部。那为什么我看不到图像。

GalleryGridAdapter.java

package com.test.Adapter;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v4.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;

import com.test.R;

public class GalleryGridAdapter extends CursorAdapter
    {
    private Context mContext;
    private Cursor mCursor;
    private int mColumnIndex;
    private ImageView imageView;

    @SuppressWarnings("deprecation")
    public GalleryGridAdapter(Context context, Cursor c, int ci) {
        super(context, c);
        mContext = context;
        mCursor = c;
        mColumnIndex = ci;
    }

    @Override
    public void bindView(View view, Context context, Cursor curs)
    {
        ImageView imageView = (ImageView) view;
        int id = curs.getInt(mColumnIndex);
        imageView.setImageURI( Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
                String.valueOf(id)));
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    }

    @Override
    public View newView(Context context, Cursor curs, ViewGroup parent)
    {
        return new ImageView(context);
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    public int mygetItemId(int position) {
        return 0;
    }


}

MyActivity.java

 String[] projection = {MediaStore.Images.Thumbnails._ID,  MediaStore.Images.Thumbnails.DATA};
    final Cursor cursor = context.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null,
            MediaStore.Images.Thumbnails.IMAGE_ID);
    int columnIndex = 0;
    if (cursor != null) {
        columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
        GridView gridview = (GridView) findViewById(R.id.gridViewGallery);
        gridview.setAdapter(new GalleryGridAdapter(getApplicationContext(), cursor, columnIndex));
        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.e("selected Image",cursor.getColumnName(i)+"");
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

使用xml代码,如:

<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"/>
</FrameLayout>

使用代码如:

public class GalleryPage extends Activity {

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);

    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);

    if (cc != null) {
        myProgressDialog = new ProgressDialog(GalleryPage.this);
        myProgressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        myProgressDialog.setMessage(getResources().getString(R.string.pls_wait_txt));            
        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, "***");
}

/**
 * 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;
}

}