2012-11-21 82 views
0

我在显示在图库视图中选择的图像预览时遇到问题。我有一张来自SD卡的图片库,单击图像时,它的预览应该显示在图库视图下方(不是通过意图单独进行的活动)。我可以向图库展示图片,但点击图片时没有任何事情发生。无法显示在图库视图中选择的图像

公共类NewActivity延伸活动{

GalleryBaseAdapter myGalleryBaseAdapter; 
Gallery myPhotoGallery; 
int[] mFiles = null; 

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

    myPhotoGallery = (Gallery)findViewById(R.id.photogallery); 

    myGalleryBaseAdapter = new GalleryBaseAdapter(this); 

    String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath(); 

    String path = ExternalStorageDirectoryPath; 
    String files; 
    File folder = new File (path); 
    final File[] listOfFiles = folder.listFiles(); 

    for (int i = 0; i < listOfFiles.length; i++) 
    {  
     if (listOfFiles[i].isFile()) 
     { 
      files = listOfFiles[i].getName(); 
      System .out.println(files); 
     } 
    } 

    for (File file : listOfFiles) { 
     myGalleryBaseAdapter.add(file.getPath()); 
    }   

    myPhotoGallery.setAdapter(myGalleryBaseAdapter);  


    myPhotoGallery.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView parent, View v, int position, long id) { 

      mFiles = new int[listOfFiles.length];  

      ImageView imageview = (ImageView)findViewById(R.id.imageView1);  
      Bitmap bitmapImage = BitmapFactory.decodeFile("/sdcard/" + mFiles[position]); 
      imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageview.setImageBitmap(bitmapImage); 

     }     
    }); 
} 

public class GalleryBaseAdapter extends BaseAdapter { 

    ArrayList<String> GalleryFileList; 
    Context context; 

    GalleryBaseAdapter(Context cont){ 
     context = cont; 
     GalleryFileList = new ArrayList<String>();  
    } 

    @Override 
    public int getCount() { 
     return GalleryFileList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return GalleryFileList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Bitmap bm = BitmapFactory.decodeFile(GalleryFileList.get(position)); 

     LinearLayout layout = new LinearLayout(context); 
     layout.setLayoutParams(new Gallery.LayoutParams(150, 150)); 
     layout.setGravity(Gravity.CENTER); 

     ImageView imageView = new ImageView(context); 
     imageView.setLayoutParams(new Gallery.LayoutParams(200, 200)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setImageBitmap(bm); 

     layout.addView(imageView); 
     return layout; 
    } 

    public void add(String newitem){ 
     GalleryFileList.add(newitem); 
    } 

} 

}

谁能告诉我什么是我的代码错误。提前致谢。

+1

等待,但....你的mFiles变量在onItemClick是一个int数组空!!!你正试图解码一个路径,它是“/ sdcard”和mFiles'row之间的连接,但是......你在哪里填充该数组?我认为你必须指定文件路径,如“listOfFiles [position] .getPath()” – kinghomer

+0

@kinghomer非常感谢你的解决方案。我刚刚替换了Bitmap bitmapImage = BitmapFactory.decodeFile(“/ sdcard /”+ mFiles [position]);与位图bitmapImage = BitmapFactory.decodeFile(listOfFiles [position] .getPath()); – user1525410

回答

0

等待,但....你的mFiles变量在onItemClick是一个int数组空!!!你正试图解码一个路径,它是“/ sdcard”和mFiles'row之间的连接,但是......你在哪里填充该数组?我认为你必须指定文件路径,如“listOfFiles [position] .getPath()”

相关问题