2012-11-05 105 views
0

我存儲在SD卡圖像和我在GridView中顯示出來,現在我想顯示在GridView控件OnItemCLick Listener.I全屏圖像無法得到旁邊screen.Only空白屏幕,顯示的全屏圖片。全屏顯示圖片

public class MyMenu extends Activity{ 
    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) { 

      return null; 
     } 
     public long getItemId(int position) { 

      return position; 
     } 
     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(90, 70)); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
       imageView.setPadding(8, 8, 8, 8); 
      } else { 
       imageView = (ImageView) convertView; 
      } 

      Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 90, 70); 
      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;  
     } 
    } 
    ImageAdapter myImageAdapter; 
    private static final int CAMERA_REQUEST = 1888; 
    ImageButton camera,lib,baby,info; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.mymenu); 
     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View v, int position, 
        long id) { 
       Intent i5=new Intent(getApplicationContext(),FullScreenSd.class); 
       i5.putExtra("id", position); 
       startActivity(i5); 
      } 
     }); 
     myImageAdapter = new ImageAdapter(this); 
     gridview.setAdapter(myImageAdapter); 
     File folder = new File(Environment.getExternalStorageDirectory() + "/temp/"); 
     if (folder.exists()) { 
      String ExternalStorageDirectoryPath = Environment 
        .getExternalStorageDirectory() 
        .getAbsolutePath(); 
      String targetPath = ExternalStorageDirectoryPath + "/temp/"; 
      File targetDirector = new File(targetPath); 
      File[] files = targetDirector.listFiles(); 
      for (File file : files){ 
       myImageAdapter.add(file.getAbsolutePath()); 
      } 
     } 

和接收類,

image=(ImageView)findViewById(R.id.image); 
     Intent i = getIntent(); 
     int resId = i.getExtras().getInt("id"); 
     image.setImageResource(resId); 
+0

那麼,什麼是你的問題?請清楚說明你的問題。 –

+0

你爲什麼將資源ID設置爲位置? – Nishant

+0

明確指出問題... –

回答

0
i5.putExtra("id", position); 

image.setImageResource(resId); 

正是你在這裏做什麼?位置是在gridview中的位置。你爲什麼把它作爲ID?

0

的一部分,你做i5.putExtra("id", position);是被點擊的元素的位置。這不是你需要的,你需要點擊物品的resId。假設你有存儲在某些數組中的殘油,你應該通過i5.putExtra("id", resIdArray[position]);

0

有此問題的四個解決方案,但前兩種解決方案是正確的。

1)轉換成位圖字節數組然後通入活性。

轉換位圖字節數組: -

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

通行證字節數組到意圖: - 從捆綁

Intent intent = new Intent(this, NextActivity.class); 
intent.putExtra("picture", byteArray); 
startActivity(intent); 

獲取字節數組,轉換成位圖圖像: -

Bundle extras = getIntent().getExtras(); 
byte[] byteArray = extras.getByteArray("picture"); 

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
ImageView image = (ImageView) findViewById(R.id.imageView1); 

image.setImageBitmap(bmp); 

2)第一保存選定圖像轉換成內部或外部存儲器中,然後得到圖像分割成下一個活動和d全屏幕播放。

3)將圖像網址傳遞到下一個活動,然後再次在全屏活動中下載圖像,然後在圖像視圖中顯示。

4)傳位圖到的活動。(但如果你的圖像尺寸過大,當時該解決方案是不工作)