2012-09-14 58 views
0

当点击GridView中的图片之一时,它需要显示图片的完整视图,我该怎么做到这一点?这里是类。如何查看GridView中图片的完整图像,点击它

public class MainActivity extends Activity { 

    ImageAdapter myImageAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    GridView gridview = (GridView) findViewById(R.id.gridview); 
    myImageAdapter = new ImageAdapter(this); 
    gridview.setAdapter(myImageAdapter); 

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

    String targetPath = ExternalStorageDirectoryPath + "/test/"; 

    Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show(); 
    File targetDirector = new File(targetPath); 
    File[] files = targetDirector.listFiles(); 
    for (File file : files){ 
     myImageAdapter.add(file.getAbsolutePath()); 

    } 

    //ADDED this one 
    gridview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 

       // Sending image id to FullScreenActivity 
       Intent i = new Intent(getApplicationContext(), FullView.class); 
       // passing array index 
       i.putExtra("id", position); 
       startActivity(i); 
      } 
     }); 
} 

适配器类

public class ImageAdapter extends BaseAdapter { 

    private Context mContext; 
    ArrayList<String> itemList = new ArrayList<String>(); 

    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    void add(String path){ 
     itemList.add(path); 
    } 

    public int getCount() { 
     return itemList.size(); 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(220, 220)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220, 220); 

     imageView.setImageBitmap(bm); 
     return imageView; 
    } 

    public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) { 

     Bitmap bm = null; 
     // First decode with inJustDecodeBounds=true to check dimensions 
     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(path, options); 

     // Calculate inSampleSize 
     options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

     // Decode bitmap with inSampleSize set 
     options.inJustDecodeBounds = false; 
     bm = BitmapFactory.decodeFile(path, options); 

     return bm;  
    } 

    public int calculateInSampleSize(

     BitmapFactory.Options options, int reqWidth, int reqHeight) { 
     // Raw height and width of image 
     final int height = options.outHeight; 
     final int width = options.outWidth; 
     int inSampleSize = 1; 

     if (height > reqHeight || width > reqWidth) { 
      if (width > height) { 
       inSampleSize = Math.round((float)height/(float)reqHeight);  
      } else { 
       inSampleSize = Math.round((float)width/(float)reqWidth);  
      } 
     } 

     return inSampleSize;  
    } 

} 



} 

这就是林有我的问题。我不知道如何在这里查看图片,这意味着我在GridView中单击的图像的完整视图。

public class FullView extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // get intent data 
    Intent i = getIntent(); 
    // Selected image id 

    int position = i.getExtras().getInt("id"); 
    ImageAdapter imageAdapter = new ImageAdapter(this); 

    ImageView imageView = new ImageView(this); 

    //IM HAVING PROBLEMS WITH THIS LINE. 
    imageView.setImageResource(imageAdapter.itemList.get(position)); 
} 

} 
+0

本教程可能对您有所帮助。 http://www.androidhive.info/2012/02/android-gridview-layout-tutorial/ – Swayam

回答

0

你itemList中包含图片的路径,但您要设置图像资源。你应该设置图像uri。

String imagePath = imageAdapter.itemList.get(position); 
Uri imageUri = Uri.parse(imagePath); 
imageView.setImageUri(imageUri); 

或者创建的路径被拉伸:

Drawable d = Drawable.createFromPath(imagePath); 
imageView.setImageDrawable(d); 

编辑:

试想想起来了,你要发送到您的第二个活动图像位置,但ImageAdapter将是空的,因为这是另一项活动。

因此,不应该发送意图中的位置,而应发送图像路径。

+0

我试过了,但是一旦我点击了GridView中的图片,应用就崩溃了。 – aaaaAndroid

+0

发布您的错误日志。 –

+0

好的w8错误是这样的。 09-14 09:21:31.747:E/AndroidRuntime(25988):java.lang.RuntimeException:无法启动活动ComponentInfo {}:java.lang.IndexOutOfBoundsException:索引0无效,大小为0 – aaaaAndroid

0

如果您确信

imageAdapter.itemList.get(position) 

为您提供了图像,然后尝试将布局PARAMS到ImageView的。

LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, 
     LayoutParams.WRAP_CONTENT); 
imageView.setLayoutParams(lp); 

编辑: - 这应该工作。 尝试映像路径设置为意图像

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, 
      int position, long id) { 
     // Sending image id to FullScreenActivity 
     Intent i = new Intent(getApplicationContext(), FullView.class); 
     // passing array index 
     i.putExtra("uri", myImageAdapter.itemList.get(position)); 
     startActivity(i); 
    } 
}); 

而在第二个活动中使用

public class FullView extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // get intent data 
     Intent i = getIntent(); 

     // Selected image id 
     String uri = i.getStringExtra('uri'); 
     ImageView imageView = new ImageView(this); 
     LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT); 
     imageView.setLayoutParams(lp); 
     Uri imageUri = Uri.parse(imagePath); 
     imageView.setImageUri(imageUri); 
    } 
} 
+0

我应该在哪里添加?顺便说一下,在我的代码中:ImageView.setImageResource(imageAdapter.itemlist.get(position));有红线。 – aaaaAndroid

+0

我该如何解决这个问题? – aaaaAndroid

+0

我更新了我的答案 – blessenm

相关问题