点击图片后在全屏显示

3
我正在开发一款即时聊天应用程序。在一个活动中,我有三个选项卡,分别是聊天、群组和联系人。在群组选项卡中,我使用BaseAdapter来填充ListView。现在ListView中可以包含图片。当点击图片时,我希望将其以全屏方式显示出来。
在适配器中,我使用以下代码来处理ImageView的点击事件:
//On clicking image,display the image in full screen


 imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, FullImageActivity.class);
                intent.putExtra("image", image);
                context.startActivity(intent);              
            }
        });

这里的“image”是一个图片的base64表示。

FullImageActivity.java

    public class FullImageActivity extends AppCompatActivity {
    ImageView imgFullImage;

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

        ///findViewBYID
        imgFullImage = (ImageView) findViewById(R.id.fullImage);

        Bundle bundle = getIntent().getExtras();
        String image = bundle.getString("image");
        Bitmap bitmap = decodeImage(image);
        imgFullImage.setImageBitmap(bitmap);
    }    

    private Bitmap decodeImage(String data) {
        byte[] b = Base64.decode(data, Base64.DEFAULT);
        Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
        return bmp;
    }
}

但是它对我不起作用。当我点击它时,它会跳转到FullIMageActivity,但立即返回到Group Tab。请帮助我修复它。

将图像作为意图的一部分传递可能不是一个好主意 :) 为什么不将图像保存在内部或外部存储中,并在意图中提供下一个活动的路径呢? - Sandeep Bhandari
嗨,Deepak,你正在使用XMPP和Asmack库进行开发吗? - Nikhil Borad
@NikhilBorad:我在我的应用程序中使用socket.io-client库。 - Deepak Rattan
@NikhilBorad:好的,当然。 - Deepak Rattan
来这里... http://chat.stackoverflow.com/rooms/info/110529/chat-app-android?tab=general - Nikhil Borad
3个回答

1

您做错了,这是正确的方法

在您的第一个活动中

首先将 ImageView 转换为位图

imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();

Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("BitmapImage", bitmap);

并且在第二个活动中

 Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");

然后在你的ImageView中显示位图。

1

这里的Base64图像是一串数据,如果通过意图传递给其他活动,则不是一个好主意,因为您可能会丢失数据或应用程序负载过多。因此,需要使用一个模型类来存储Base64字符串并检索它。 如何实现?请参见下面的代码

ModelBase64.java

class ModelBase64{
   public static String base64Image;
}

现在将图像字符串分配给base64Image

imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ModelBase64.base64Image=image;
            Intent intent = new Intent(context, FullImageActivity.class);
            context.startActivity(intent);              
        }
    });

现在在另一个类中检索。

FullImageActivity.java

public class FullImageActivity extends AppCompatActivity {
ImageView imgFullImage;

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

    ///findViewBYID
    imgFullImage = (ImageView) findViewById(R.id.fullImage);

   // Bundle bundle = getIntent().getExtras();
    //String image = bundle.getString("image");
    String image = ModelBase64.base64Image;
    Bitmap bitmap = decodeImage(image);
    imgFullImage.setImageBitmap(bitmap);
}    

private Bitmap decodeImage(String data) {
    byte[] b = Base64.decode(data, Base64.DEFAULT);
    Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
    return bmp;
}
}

1

对于您最适合的解决方案是ImageViewPopUpHelper。https://github.com/juliomarcos/ImageViewPopUpHelper

从该网址获取源代码并创建一个名为“ImageViewPopUpHelper”的类。之后,每当您想要在单击时看到弹出窗口时,请在该图像上定义setOnClicklistner。

profile_image.setOnClickListener(new View.OnClickListener() 
{ 
   @Override public void onClick(View v) { 
       ImageViewPopUpHelper.enablePopUpOnClick(activity, profile_image, profile_image.getDrawable());
   }
});

你应该发布一些代码片段并解释一些内容。而在评论中发布链接并不是一个合适的方式。 - Ravi Vaghela
从此URL获取源代码,并创建一个名为“ImageViewPopUpHelper”的类。之后,每当您想要在单击时看到弹出时,请在图像上定义setOnClicklistner,如下所示: profile_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageViewPopUpHelper.enablePopUpOnClick(activity, profile_image, profile_image.getDrawable()); } }); - Nikhil Borad
2
明白了,但您需要更新您的答案并将此评论放在您的帖子中。 - Ravi Vaghela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接