显示存储在使用一个GridView SD卡的图片 [英] Displaying pictures stored on the SD Card using a Gridview

查看:91
本文介绍了显示存储在使用一个GridView SD卡的图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是比较新的Andr​​oid和我真的需要这一个帮助。我试图写一些code,将显示使用一个GridView SD卡上的图片,但到目前为止,当我运行在顶部的应用程序只TextView的显示。我想知道,如果在我的code的逻辑严重缺陷的主要活动code,图像适配器类code或两者兼而有之。这是我的code:

I am relatively new to android and I really need help with this one. I am trying to write some code that will display the pictures on the sd card using a GridView, but so far when I run the application only the textview at the top is shown. I would like to know if there is a serious flaw in the logic of my code in the Main Activity code, Image Adapter class code or both. This is my code:

package com.newtestforsdcarddisplay;

import android.app.Activity;
import android.os.Bundle;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.GridView;
import android.widget.AdapterView;
import android.widget.Toast;
import android.provider.MediaStore;
import android.provider.MediaStore.Images.Thumbnails;
import android.net.Uri;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends Activity {

public Cursor myImageCursor;
public int columnNumber;



/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

String[] imageIDs = new String[]{Thumbnails._ID};

Uri myImagesSource = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

myImageCursor = managedQuery(myImagesSource, 
                imageIDs, null, null, MediaStore.Images.Thumbnails._ID);

         columnNumber = myImageCursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

    GridView PhoneImageView = (GridView)findViewById(R.id.sdcard);
    PhoneImageView.setAdapter(new ImageAdapter(this));

    PhoneImageView.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {



              String[] data = { MediaStore.Images.Media.DATA };

             Cursor  viewImageCursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, data,
null, null, MediaStore.Images.Thumbnails._ID );
           int imageColumnIndex = viewImageCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
       viewImageCursor.moveToPosition(position);
       viewImageCursor.moveToFirst();
       String filepath = viewImageCursor.getString(imageColumnIndex);
       Toast.makeText(MainActivity.this, filepath, Toast.LENGTH_LONG).show();

      Bitmap yourSelectedImage = BitmapFactory.decodeFile(filepath);

      }
   });

}       
}


package com.newtestforsdcarddisplay;



import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.net.Uri;
import android.provider.MediaStore;

public class ImageAdapter extends BaseAdapter{

    final   MainActivity pca = new MainActivity();



    private Context context;

    public ImageAdapter(Context localContext) {
      //  context = localContext;
    }

    public int getCount() {
       // return pca.myImageCursor.getCount();
        return 0;
    }
    public Object getItem(int position) {
        return position;
    }
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView picturesView;
        if (convertView == null) {
            picturesView = new ImageView(context);
            // Move cursor to current position
            pca.myImageCursor.moveToPosition(position);
            // Get the current value for the requested column
            int imageID = pca.myImageCursor.getInt(pca.columnNumber);
            // Set the content of the image based on the provided URI
            picturesView.setImageURI(Uri.withAppendedPath(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageID));
            picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            picturesView.setPadding(8, 8, 8, 8);
            picturesView.setLayoutParams(new GridView.LayoutParams(100, 100));
        }
        else {
            picturesView = (ImageView)convertView;
        }
        return picturesView;
    }   



}


package com.newtestforsdcarddisplay;



import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.net.Uri;
import android.provider.MediaStore;

public class ImageAdapter extends BaseAdapter{

    final   MainActivity pca = new MainActivity();



    private Context context;

    public ImageAdapter(Context localContext) {
      //  context = localContext;
    }

    public int getCount() {
       // return pca.myImageCursor.getCount();
        return 0;
    }
    public Object getItem(int position) {
        return position;
    }
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView picturesView;
        if (convertView == null) {
            picturesView = new ImageView(context);
            // Move cursor to current position
            pca.myImageCursor.moveToPosition(position);
            // Get the current value for the requested column
            int imageID = pca.myImageCursor.getInt(pca.columnNumber);
            // Set the content of the image based on the provided URI
            picturesView.setImageURI(Uri.withAppendedPath(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageID));
            picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            picturesView.setPadding(8, 8, 8, 8);
            picturesView.setLayoutParams(new GridView.LayoutParams(100, 100));
        }
        else {
            picturesView = (ImageView)convertView;
        }
        return picturesView;
    }   



}


<?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"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    <GridView  
    android:id="@+id/sdcard"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="90dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>


</LinearLayout>

可能有人帮我吗????正如我以前说过,我是相当新的Andr​​oid和我一直在这个挣扎了很长一段时间。任何帮助将非常AP preciated。

Could somebody help me please???? As I said before, I am fairly new to android and I have been struggling with this for a really long time. Any help would VERY MUCH appreciated.

推荐答案

getCount将()将返回0,我认为你应该返回 myImageCursor .getCount()

your getCount() is returning 0. i think you should return myImageCursor.getCount()

您可以更改构造函数

ImageAdapter(Context ctx,Cursor cr)
{
this.context=ctx;
this.cursor=cr;
}

然后用 cr.getCount()在适配器的 getCount将()

这篇关于显示存储在使用一个GridView SD卡的图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆