2016-11-04 9 views
-2

私はimageviewで指定した時間間隔の間にイメージビューで表示している配列のセットを持っています。画像をクリックすると、私は別のactivity.Howでそのイメージを表示したいと思います。アンドロイドの別のアクティビティに画像を送信するには?

コード:

int[] imageArray = {R.drawable.amazon, R.drawable.app_me, 
     R.drawable.borabora, R.drawable.dubai}; 
public void showImage(){ 
    m_oHandler = new Handler(); 
    Runnable oRunnable = new Runnable() { 
     int i = 0; 

     @Override 
     public void run() { 
      img.setImageResource(imageArray[i]); 
      i++; 
      if (i > imageArray.length - 1) { 
       i = 0; 
      } 
      img.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // Didn't know where to go 
        Intent intent = new Intent(MainActivity.this, Second.class); 
        intent.putExtra("BitmapImage", imageArray); 
       } 
      }); 
      m_oHandler.postDelayed(this, 6000); 

     } 
    }; 
    m_oHandler.postDelayed(oRunnable, 6000); 
} 
+0

arraylistの位置を渡し、arraylistを静的にして、グローバルに使用できるようにします。 –

+0

方法....................................... – Raghav

+0

res/values/array.xmlファイルを開き、位置だけを次のアクティビティに渡します。次のアクティビティで配列にアクセスしてイメージを取得してください:) –

答えて

1

ビットマップオブジェクトを渡しません。
代わりにdrawableリソースのIDを渡します。

Intent intent = new Intent(MainActivity.this, Second.class); 
intent.putExtra("image_res_ids", CollectonUtils.join("/", imageArray); 

そしてSecond活動、

getIntent().getExtra("image_res_ids"); 

の画像リソースID列を取得します。

0

あなたのイメージはdrawableリソースですが、それはそれ以上のものではありません。だからあなたは間違いなくインテントのエクストラとしてそれらを渡すことができます。

+0

方法................................ .... – Raghav

0

私は別のアクティビティでその画像を表示したい画像をクリックすると、あなたが望む余分として配列を送信して、より多くの詳細がIntents

1

を見ているためgetIntent().getIntArrayExtra(EXTRA_IMAGE)

でそれを取得することができます。

.... 
img.setImageResource(imageArray[i]); 
img.setTag(imageArray[i]); 
.... 

2.getTag()

設定描画可能なIDを使用して使用してsetTagを現在の描画可能なIDを保存し、ビューのクリックでそれを取り戻すため

使用imgsetTag()方法onClickメソッド内でvからIDを取得:

int click_drawable_id=Integer.parseInt(v.getTag().toString()); 
intent.putExtra("clicked_img_draw_id", click_drawable_id); 

imageArray Arrayを渡す代わりに、clicked_img_draw_idを使用してdrawable IDを取得し、setImageResourceに渡すと、別のアクティビティでクリックされた画像が表示されます。

+0

と余分なものを得る方法 – Raghav

+1

@Raghav: 'int draw_id = getIntent()。getIntExtra(" clicked_img_draw_id "、-1);第二の活動のonCreateで –

0

setTagを使用してインデックス/リソースIDを保存すると、img.setTag(index)は次のようになります。 そして、あなたはタグから、インデックス/リソースIDを削除して渡すことができ、それをフォワーディング関連として意図余分

@Override 
     public void run() { 
      img.setImageResource(imageArray[i]); 
      img.setTag(i) 
      i++; 
      //your code 
      img.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // Didn't know where to go 
        Intent intent = new Intent(MainActivity.this, Second.class); 
        intent.putExtra("IMAGE_RESOURCE", img.getTag()); 
       } 
      }); 
0

だけ

Intent i = new Intent(getApplicationContext(), FullImageActivity.class); 
       // passing array index 
       i.putExtra("id", position); 
       startActivity(i); 

が意図

Intent i = getIntent(); 

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

     ImageView imageView = (ImageView) findViewById(R.id.full_image_view); 
     imageView.setImageResource(imageAdapter.mThumbIds[position]); 
を取得し、あなたの選択した画像の位置を送信しよう

詳細を確認http://www.androidhive.info/2012/02/android-gridview-layout-tutorial/

0
If you want to pass single image to next activity, than in your case, only pass image index like 

Intent intent = new Intent(MainActivity.this, Second.class); 
        intent.putExtra("BitmapImage", imageArray[i]); 

and on next activity get it. like 
int image_id= getIntent().getIntExtra("BitmapImage",0); 

this image_id is your selected image resouce id and you can set this as setImageresouce to image view. 
0
previewView = (ImageView) findViewById(R.id.imgPostIssue); 

最初の活動

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

セカンド活動

Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      byte[] byteArray = extras.getByteArray("picture"); 
      if (byteArray != null) { 
       Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
       ImageView image = (ImageView) findViewById(R.id.imgPostIssue); 

       image.setImageBitmap(bmp); 
      } 
     } 

それはあなたを助けることを願っています...それは間違いなく動作しますが、これを試してみてください。

0

setTag()を試してみてください。

BitmapCache.java

public class BitmapCache { 

    private static SparseArray<Bitmap> _bitmapCache = new SparseArray<>(); 

    public static void fillBitmapCache(@NonNull Resources resources) { 
     if (null == _bitmapCache) 
      _bitmapCache = new SparseArray<>(); 

     if (_bitmapCache.indexOfKey(R.drawable.amazon) < 0) 
      _bitmapCache.append(R.drawable.amazon, BitmapFactory.decodeResource(resources, R.drawable.amazon)); 

     if (_bitmapCache.indexOfKey(R.drawable.app_me) < 0) 
      _bitmapCache.put(R.drawable.app_me, BitmapFactory.decodeResource(resources, R.drawable.app_me)); 

     if (_bitmapCache.indexOfKey(R.drawable.borabora) < 0) 
      _bitmapCache.put(R.drawable.borabora, BitmapFactory.decodeResource(resources, R.drawable.borabora)); 

     if (_bitmapCache.indexOfKey(R.drawable.dubai) < 0) 
      _bitmapCache.put(R.drawable.dubai, BitmapFactory.decodeResource(resources, R.drawable.dubai)); 
    } 

    public static Bitmap getAt(int position) { 
     return get(keyAt(position)); 
    } 

    public static int keyAt(int position) { 
     return _bitmapCache.keyAt(position); 
    } 

    public static Bitmap get(@DrawableRes int resId) { 
     return _bitmapCache.get(resId); 
    } 

    public static boolean has(@DrawableRes int resId) { 
     return _bitmapCache.indexOfKey(resId) < 0; 
    } 

    public static void append(@DrawableRes int resId, @NonNull Resources resources) { 
     _bitmapCache.append(resId, BitmapFactory.decodeResource(resources, resId)); 
    } 

    public static void put(@DrawableRes int resId, @NonNull Resources resources) { 
     _bitmapCache.put(resId, BitmapFactory.decodeResource(resources, resId)); 
    } 

    public static int size() { 
     return _bitmapCache.size(); 
    } 
} 

活動まず

private void showImage() { 
     BitmapCache.fillBitmapCache(getResources()); 

     m_oHandler = new Handler(); 
     Runnable oRunnable = new Runnable() { 
      int i = 0; 

      @Override 
      public void run() { 
       img.setImageBitmap(BitmapCache.getAt(i)); 
       img.setTag(BitmapCache.keyAt(i)); 
       i++; 
       if (i >= BitmapCache.size()) { 
        i = 0; 
       } 
       img.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (null != v.getTag()) { 
          int resId = (int) v.getTag(); 
          Intent intent = new Intent(MainActivity.this, Second.class); 
          intent.putExtra("BitmapImage", resId); 
         } 
        } 
       }); 
       m_oHandler.postDelayed(this, 6000); 

      } 
     }; 
     m_oHandler.postDelayed(oRunnable, 6000); 
    } 

セカンド活動に

private void displayImageOnSecond() { 
     Bundle bundle = getIntent().getExtras(); 
     int resId = bundle.getInt("BitmapImage", 0); 

     if (resId > 0) { 
      secondImage.setImageBitmap(BitmapCache.get(resId)); 
     } 
    } 

これをチェックしてください。また、私はViewPagerを使用して自動回転ではなく、ためにそれをカスタマイズすることをお勧めしますあなたは現在使用しています。 Runnableは、Activityが破壊された場合にメモリリークを引き起こす可能性があります。

関連する問題