【问题标题】:Displaying images from specific folder in sd card in grid view在网格视图中显示来自 sd 卡中特定文件夹的图像
【发布时间】:2012-05-11 10:10:26
【问题描述】:

我开发了一个应用程序,我必须在其中显示来自 sd 卡中特定文件夹的图像。我的代码工作正常,但它显示了所有 sd 卡的图像。我已将选择 args 作为我的文件夹名称,因为它已在以下帖子中提及: Displaying images from a specific folder on the SDCard using a gridview

但是,它没有用。请建议我如何做到这一点: 下面我发布我的代码。

public class Album1Activity extends Activity {
static Cursor imageCursor;
static int columnIndex;
GridView gridView;
Intent in;
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grid);
    String[] imgColumnID = {MediaStore.Images.Thumbnails._ID};
    Uri uri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI;
    imageCursor = managedQuery(uri, imgColumnID, null, null, 
                    MediaStore.Images.Thumbnails.IMAGE_ID);
    columnIndex = imageCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
    gridView = (GridView)findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(getApplicationContext()));
    gridView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            String[] dataLocation = {MediaStore.Images.Media.DATA};
            //String []dataLocation = {Environment.getExternalStorageDirectory().getAbsolutePath()};
            imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                        dataLocation, null, null, null);
            columnIndex = imageCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            imageCursor.moveToPosition(position);
            String imgPath = imageCursor.getString(columnIndex);
            in = new Intent(getApplicationContext(), FullScreen.class);
            in.putExtra("id", imgPath);
            startActivity(in);
        }//onItemClickListener
    });
}//onCreate

public static class ImageAdapter extends BaseAdapter{
    private Context context;
    //Album1Activity act = new Album1Activity();
    public ImageAdapter(Context context){
        this.context = context;
    }//ImageAdapter
    public int getCount() {
        // TODO Auto-generated method stub
        return imageCursor.getCount();
    }//getCount

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }//getItem

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }//getItemId

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView iv;
        if(convertView == null){
            iv = new ImageView(context);
            imageCursor.moveToPosition(position);
            int imageID = imageCursor.getInt(columnIndex);
            iv.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
                            "" +imageID));
            iv.setScaleType(ImageView.ScaleType.FIT_XY);
            iv.setPadding(5, 5, 5, 5);
            iv.setLayoutParams(new GridView.LayoutParams(100, 100));
        }//if
        else{
            iv = (ImageView)convertView;
        }//else
        return iv;
    }//getView

}//ImageAdapter

}//相册1活动

【问题讨论】:

    标签: android gridview android-sdcard


    【解决方案1】:

    抱歉回复晚了... 下面我贴出最终解决方案

    public class Album3 extends Activity {
    File [] mediaFiles;
    File imageDir;
    static GridView gridView;
    ImageAdapter adapter;
    Intent in;
    ImageButton btncam;
    String name = null;
    ArrayList<Bitmap> bmpArray = new ArrayList<Bitmap>();
    ArrayList<String> fileName = new ArrayList<String>();
    public static final String TAG = "Album3Activity";
    
    public void onCreate(Bundle savedInstanceState) 
    {
        imageDir = new File(Environment.getExternalStorageDirectory().toString()+
                 "/diplomat");
        super.onCreate(savedInstanceState);
        if((imageDir.exists()))
        {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.grid);
            mediaFiles = imageDir.listFiles();
            //Log.d("Length of images",""+mediaFiles.length);
            for(File file : mediaFiles)
            {
                bmpArray.add(convertToBitmap(file));
                fileName.add(readFileName(file));
                //Log.d(TAG + "bmpArray Size", ""+bmpArray.size());
                //Log.d(TAG, "call to convertToBitmap");
            }//for
    
            adapter = new ImageAdapter(this, bmpArray, fileName);
            gridView = (GridView)findViewById(R.id.gridview);
            gridView.setAdapter(adapter);
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED
                    , Uri.parse(Environment.getExternalStorageDirectory().toString()+"/diplomat")));
    
            gridView.setOnItemClickListener(new OnItemClickListener() {
    
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                in = new Intent(getApplicationContext(), FullScreen.class);
                in.putExtra("id", position);
                startActivity(in);
            }
        });
        }//if
        else
        {
            setContentView(R.layout.no_media);
        }
    }//onCreate
    
    public static Bitmap convertToBitmap(File file) 
    {
        URL url = null;
        try 
        {
            url = file.toURL();
        } catch (MalformedURLException e1) 
        {
            //Log.d(TAG, e1.toString());
        }//catch
    
        Bitmap bmp = null;
        try
        {
           bmp = BitmapFactory.decodeStream(url.openStream());
           //bmp.recycle();
        }catch(Exception e)
        {
            //Log.d(TAG, "Exception: "+e.toString());
        }//catch
        return bmp;
    }//convertToBitmap
    
    public String readFileName(File file){
        String name = file.getName();
        return name;
    }//readFileName
    }//class
    

    【讨论】:

    • 帖子需要更多赞
    • 文件名有什么用?
    • @Nitish:您好,您的代码仅显示文件夹/diplomat 中的媒体文件,对吗?所以不能显示位于 sdcard 中不同文件夹中的其他媒体文件,对吗?
    • @Nitish 视频是什么?
    【解决方案2】:

    你可以使用

    Uri.parse("sdcard 文件夹路径")

    方法

    【讨论】:

      【解决方案3】:

      您的链接答案已经有了答案。正确使用选择参数。

      cursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
          projection, 
          MediaStore.Images.Media.DATA + " like ? ",
          **new String[] {"%myimagesfolder%"},**  
          null);
      

      【讨论】:

        【解决方案4】:

        在上面的代码中,你从图库中获取所有图片试试这个

        File sdImageMainDirectory ;
        String imageName ;
        File root = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "MYPICS" + File.separator);
                if (!root.exists()) {
                    root.mkdirs();
                }
        
        ImageView camera = (ImageButton) findViewById(R.id.imageButton1);
        
        cam.setOnClickListener(new OnClickListener() {
        
                    @Override
                    public void onClick(View v) {
                        imageName = "MyPic.png";
                        sdImageMainDirectory = new File(root, imageName);
                        i++;
                        Uri imgUri = Uri.fromFile(sdImageMainDirectory);
        
                        Intent intent = new Intent(
                                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
                        startActivityForResult(intent, 0);
        
                        // startCameraActivity();
                    }
                });
        
        @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (resultCode) {
                case 0:
                     finish();
                    break;
        
                case -1:
                    files = root.listFiles();
                    count = files.length;
                    try {
        
                        ImageView image = new ImageView(this);
        
                        LinearLayout.LayoutParams vp = new LinearLayout.LayoutParams(
                                200, 200);
                        image.setLayoutParams(vp);
                        image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                        image.setPadding(8, 8, 8, 8);
                        image.setMaxHeight(50);
                        image.setMaxWidth(50);
                        image.setAdjustViewBounds(true);
                        BitmapFactory.Options option = new BitmapFactory.Options();
                        option.inSampleSize = 2;
                        Bitmap bm = BitmapFactory.decodeFile(root.getPath() + "/"
                                + imageName,option);
                        image.setImageBitmap(bm);
                        linearImageView.addView(image);
        
        
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
        
        
        
                }
        
            }
        

        【讨论】:

        • 您的代码只显示文件夹 MYPICS 中的文件,对吗?
        • 可以,但您可以根据需要进行更改。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多