2011-05-23 157 views
0

我有一个网格视图,当用户点击图像时,我将发送意图启动相机并拍照。从活动结果我会得到一个图像路径,我会从该路径获取图像,现在如何更新网格项目位置的图像。从onactivityresult更新gridview

这里是我的代码:

public class ImageGrid extends Activity { 
    /** Called when the activity is first created. */ 


    ImageAdapter mAdapter; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     mAdapter = new ImageAdapter(this); 
     gridview.setAdapter(mAdapter); 

     gridview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       //Toast.makeText(ImageGrid.this, "" + position, Toast.LENGTH_SHORT).show(); 
       ((ImageView) v).setImageResource(R.drawable.icon); 

       startCameraActivity(position); 
      } 
     }); 

    } 


    protected void startCameraActivity(int position) 
    { 
     File file = new File("/sdcard/"+ position +".png"); 
     Uri outputFileUri = Uri.fromFile(file); 

     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

     startActivityForResult(intent, position); 
    } 



    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     Log.i("MakeMachine", "resultCode: " + resultCode); 
     switch(resultCode) 
     { 
      case 0: 
       Log.i("MakeMachine", "User cancelled"); 
       break; 

      case -1: 
       onPhotoTaken(requestCode); 
       break; 
     } 
    } 


    protected void onPhotoTaken(int position) 
    { 

     Bitmap image = getPreview("/sdcard/"+ position +".png"); 
    // how to update the grid view image. 

    } 


    /* 
    * Create a bitmap image by reading the image data from the path provided. 
    */ 
    public Bitmap getPreview(String path) { 
     File image = new File(path); 

     BitmapFactory.Options bounds = new BitmapFactory.Options(); 
     bounds.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(image.getPath(), bounds); 
     if ((bounds.outWidth == -1) || (bounds.outHeight == -1)) 
      return null; 

     int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight 
       : bounds.outWidth; 

     BitmapFactory.Options opts = new BitmapFactory.Options(); 
     opts.inSampleSize = originalSize/100; 
     return BitmapFactory.decodeFile(image.getPath(), opts); 
    } 


    public class ImageAdapter extends BaseAdapter { 
     private Context mContext; 

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

     public int getCount() { 
      return mThumbIds.length; 
     } 

     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) { 
      ImageView imageView; 
      if (convertView == null) { // if it's not recycled, initialize some attributes 
       imageView = new ImageView(mContext); 
       imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
       imageView.setPadding(8, 8, 8, 8); 
      } else { 
       imageView = (ImageView) convertView; 
      } 

      imageView.setImageResource(mThumbIds[position]); 
      return imageView; 
     } 

     // references to our images 
     private Integer[] mThumbIds = { 
       R.drawable.sample_0, R.drawable.sample_1, 
       R.drawable.sample_2, R.drawable.sample_3, 
       R.drawable.sample_4, R.drawable.sample_5, 
       R.drawable.sample_6, R.drawable.sample_7, 
     }; 
    } 
} 

回答

0

快速件事我建议是挂到选定的ImageView:

public class ImageGrid extends Activity { 

    ImageAdapter mAdapter; 
    ImageView mSelectedView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     /** ... **/ 
     gridview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       mSelectedView = (ImageView) v; 
       mSelectedView.setImageResource(R.drawable.icon); 
       startCameraActivity(position); 
      } 
     }); 

    } 

,然后在onPhotoTaken更新:

protected void onPhotoTaken(int position) 
{ 
    Bitmap image = getPreview("/sdcard/"+ position +".png"); 
    mSelectedView.setImageBitmap(image); 
} 

不要忘了,您还需要更新ImageAdapter类,以便它在使用新图像时使用G ridView为那个位置调用getView()。