如何在查看页中单击时在新活动中打开图像



我正在使用viewpager来显示图像的幻灯片,但是当我单击任何一个图像时,它需要在新活动中打开。谁能帮我?

单击图像时,我显示吐司消息,但我的实际要求是在新活动中打开图像。

代码如下:

class MyCustomPagerAdapter extends PagerAdapter{
private Context context;
private int images[];
private LayoutInflater layoutInflater;
public int i;
MyCustomPagerAdapter(Context context, int images[]) {
    this.context = context;
    this.images = images;
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
    return images.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
    View itemView = layoutInflater.inflate(R.layout.full_profile, container, false);
    ImageView imageView = (ImageView) itemView.findViewById(R.id.expandedImage);
    imageView.setImageResource(images[position]);
    container.addView(itemView);
    //listening to image click
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Toast.makeText(context, "you clicked image " + (position + 1), Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(context, ImageOpeningActivity.class);
            intent.putExtra("MY_IMAGE", images[position]);
            context.startActivity(intent);
        }
    });
    return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

}

图像打开活动.class

class ImageOpeningActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.imageopening);

    ImageView imageView = (ImageView) findViewById(R.id.myImageView);
    if(getIntent()!=null){
        int image  = getIntent().getExtras().getInt("MY_IMAGE");
        imageView.setImageResource(image);
    }
}

}

虽然我更改了我的代码,但出现错误,错误如下。

 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.vmax.kalyanam/com.vmax.kalyanam.ImageOpeningActivity}: java.lang.IllegalAccessException: java.lang.Class<com.vmax.kalyanam.ImageOpeningActivity> is not accessible from java.lang.Class<android.app.Instrumentation>
public class Full_profile extends Activity {
Toolbar toolbar;
CollapsingToolbarLayout collapsingToolbarLayout;
//public String title = "KANDIBANDA ROJA";

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.full_profile);

    ViewPager viewPager;
    int images[] = {
            R.drawable.one,
            R.drawable.two,
            R.drawable.three,
            R.drawable.one
    };
    MyCustomPagerAdapter myCustomPagerAdapter;
    viewPager = (ViewPager)findViewById(R.id.viewPager);
    myCustomPagerAdapter = new MyCustomPagerAdapter(Full_profile.this, images);
    viewPager.setAdapter(myCustomPagerAdapter);

"聆听图像点击"中加入意图

      imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent intent = new Intent(this,PhotoViewerActivity.class);
intent.putExtra("image", imageurl);
    startActivity(intent);
            }
        });

public class PhotoViewerActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 

        String url = getIntent().getStringExtra("image");
     // you can show image from url using library like glide or picasso
    }
    @Override
    protected int getLayoutResourceId() {
        return R.layout.activity_photo_viewer;
    }
    @Override
    public void onBackPressed() {
        PhotoViewerActivity.this.finish();
    }
}

首先,在你的代码中执行此操作,而不是 Toast。注释掉 Toast 并粘贴这些行。

Intent intent = new Intent(this, ImageOpeningActivity.class);
intent.putExtra("MY_IMAGE", images[position]);
context.startActivity(intent);

step2:使用ImageOpenActivity的名称创建活动,并在其xml中采用Imageview,假设其ID是myImageView,然后在创建时执行以下操作

ImageView imageView = (ImageView) findViewById(R.id.myImageView);
    if(getIntent()!=null){
        int image  = getIntent().getExtras().getInt("MY_IMAGE");
        imageView.setImageResource(image);
    }

我假设你的图像[位置]是整数数组。

就像@Pratap说的那样,您可以将图像网址从一个活动发送到另一个活动。但是,如果要将图像本身作为位图传递,请遵循此方法。位图实现了 Parcelable,因此您可以将其作为额外意图传递。

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

并通过调用在图像详细信息活动中检索它,

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

警告:不要通过 Intent 传递超过 500Kb 的数据 参考此站点

XML布局中使用ImageView创建新活动,并从ViewPager图像单击中调用此活动

Intent intent = new Intent(this, ImageDetailActivity.class);
intent.putExtra("image",images[i]);
startActivity(intent);

图像详细信息活动.java

    public class ImageDetailActivity extends AppCompatActivity {

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

          Intent intent =  getIntent();
              imageDrawable=   getResources().getDrawable(intent.getIntExtra("image",-1)); 
            imageView.setImageDrawable(imageDrawable);
        }   
    }

确保将此 ImageDetailActivity 添加到您的 android 清单文件中

最新更新