如何将图像从网格视图传递到android中的另一个活动

时间:2017-02-20 12:26:55

标签: android android-intent gridview android-drawable

我有一个带有图像的网格视图,并且在图像上单击特定图像应该传递给下一个活动。现在,如果使用单个图像可绘制这个步骤很容易但是如何在网格视图中处理图像时获得结果。图像存储在客户端。 这是我的带有网格视图的activity1的代码

public class GridActivity extends AppCompatActivity {

GridView androidGridView;

Integer[] imageIDs = {
        R.drawable.alien, R.drawable.capt_spaulding, R.drawable.captain,
        R.drawable.stark, R.drawable.casper, R.drawable.captainamerica,
        R.drawable.spidey, R.drawable.abra, R.drawable.bulbasaur
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_grid);

    androidGridView = (GridView) findViewById(R.id.avatar_grid);
    androidGridView.setAdapter(new ImageAdapterGridView(this));

    androidGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.captain);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();

            Toast.makeText(getBaseContext(), "Grid Item " +
                    (position + 1) + " Selected", Toast.LENGTH_LONG).show();

            Intent intent = new Intent(GridActivity.this,FinalActivity.class);
            gosudo.putExtra("picture", byteArray);
            startActivity(intent);
        }
    });

}

public class ImageAdapterGridView extends BaseAdapter {
    private Context mContext;

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

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

    public Object getItem(int position) {
        return null;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView mImageView;

        if (convertView == null) {
            mImageView = new ImageView(mContext);
            mImageView.setLayoutParams(new GridView.LayoutParams(130, 130));
            mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            mImageView.setPadding(16, 16, 16, 16);
        } else {
            mImageView = (ImageView) convertView;
        }
        mImageView.setImageResource(imageIDs[position]);
        return mImageView;
}
}
}

这是finalActivity,其中显示所选图像

public class FinalActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_final);

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

    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
   //image view where the chosen image should set
    ImageView image = (ImageView) findViewById(R.id.selectedimageview);

    image.setImageBitmap(bmp);

}
}

我经历过像stackquestions这样的问题但没有成功。

3 个答案:

答案 0 :(得分:1)

由于您使用的是资源,因此可以传递ID。

 Intent intent = new Intent(this, FinalActivity.class);
 intent.putExtra("imageId",imageId);

在最后的活动中:

 int imageId = getIntent().getIntExtra("imageId");
 image.setImageResource(imageId);

答案 1 :(得分:0)

@Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

           //get image resource based on adapter click position.
           int imageRes = imageIDs[position];

           //then pass it with the intent.
           Intent intent = new Intent(GridActivity.this,FinalActivity.class);
           intent.putExtra("IMAGE_RES", imageRes);
           startActivity(intent);
        }
    });

    //In FinalActivity.class
    //retrieve the resource clicked and set to the imageView.
    int imageRes = getIntent().getExtra("IMAGE_RES");
    image.setImageResource(imageRes);

答案 2 :(得分:0)

所以这是解决方案, GridActivity

 int imageRes = imageIDs[position];

            Intent intent = new Intent(GridActivity.this,FinalActivity.class);
            intent.putExtra("IMAGE_RES", imageRes);
            startActivity(intent);

在FinalAct

 ImageView image = (ImageView) findViewById(R.id.selectedimageview);

    Bundle extras = getIntent().getExtras();
    int imageRes = extras.getInt("IMAGE_RES");

    image.setImageResource(imageRes);