【问题标题】:send an image from an Activity to another Activity [duplicate]将图像从活动发送到另一个活动[重复]
【发布时间】:2023-03-28 01:47:01
【问题描述】:

我在 android studio 中有两个活动。在 Activity1 中,我有一个按钮或图像视图,当我单击它时,我想将图像发送到 Activity2,当我到达 Activity2 时,图像就会在那里。当我在 Activity1 中第二次单击该按钮时,Activity2 中的图像将消失。 但我不想点击图像视图并进入第二个活动。我想在第一个活动中单击它,然后将图像发送到 sec 活动而不自动转到 sec 活动。当我手动进入 sec 活动时,图像会在那里。当我返回第一个活动并再次单击图像视图时,秒活动中的图像将消失。我怎样才能做到这一点?

public class MainActivity extends AppCompatActivity {


    byte[] bytesImage;
    public static final String MyPREFERENCES = "MyPrefs";
    //use shared preferences to save button click count
    SharedPreferences sharedPreferences;
    String hide_image;

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


        sharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);


        final ImageView imageview=(ImageView) findViewById(R.id.imageView);

        imageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (sharedPreferences.getString("activity1", "").equals("1")) {
                    //image is already clicked once
                    hide_image="1";
                }
                else{
                    hide_image="0";
                    imageview.buildDrawingCache(); //your imageview
                    Bitmap bitmap = imageview.getDrawingCache();
                    ByteArrayOutputStream ba = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.PNG, 50, ba);
                    //save the image byte array
                    bytesImage=ba.toByteArray();
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    //set 1 as button is clicked
                    editor.putString("activity1", "1");
                    editor.commit();
                }
            }
        });


        Button btn=(Button) findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this,Main2Activity.class);
                i.putExtra("byteArray", bytesImage);
                i.putExtra("hideImage", hide_image);
                startActivity(i);
            }
        });

    }
}

【问题讨论】:

  • 嗨,我的问题不同。请再读一遍。

标签: android


【解决方案1】:

在你的第一个活动中:使用

 byte[] bytesImage;
 public static final String MyPREFERENCES = "MyPrefs";
 //use shared preferences to save button click count
 SharedPreferences sharedPreferences;
 String hide_image;

在 onCreate() 中

sharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

然后设置imageview点击监听

imageview.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
                if (sharedPreferences.getString("activity1", "").equals("1")) {
                    //image is already clicked once
                    hide_image="1";
                }
           else{
               hide_image="0";
               Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
               ByteArrayOutputStream ba = new ByteArrayOutputStream();
               bitmap.compress(Bitmap.CompressFormat.PNG, 50, ba);
               //save the image byte array
               bytesImage=ba.toByteArray()
               SharedPreferences.Editor editor = sharedPreferences.edit();
                    //set 1 as button is clicked
                    editor.putString("activity1", "1");
                    editor.commit();
            }
        }
    });


manualButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(this, NextActivity.class);
                i.putExtra("byteArray", bytesImage);
                i.putExtra("hideImage", hide_image);
                startActivity(i);
            }
        });

在你的第二个活动中

String hide=getIntent().getStringExtra("hideImage");
byte[] byteArray = getIntent().getByteArrayExtra("byteArray");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
if (hide.equals("0") {
    //show image only in first click
    ImageView previewThumbnail = new ImageView(this);   
    previewThumbnail.setImageBitmap(bmp);//set bitmap to imageview
}

【讨论】:

  • 通过意图发送整个图像不是一个好主意。只需通过它的路径
  • @Androidjack 确定这是有道理的......
  • 在第二个活动中,如何将位图设置为图像视图
  • 只需引用您的 imageView,例如 imageview im= findViewById(R.id.imageview_name);然后 im.setImageBitmap(b);
  • Tnx。请再次阅读主要问题。我不想单击图像视图并转到第二个活动。我想在第一个活动中单击它,然后将图像发送到 sec 活动而不自动转到 sec 活动。当我手动进入 sec 活动时,图像会在那里。当我返回第一个活动并再次单击图像视图时,秒活动中的图像将消失。我该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 2013-03-24
  • 2016-11-04
  • 2012-07-20
相关资源
最近更新 更多