简体   繁体   English

在Viewpager中单击时,如何在新活动中打开图像?

[英]How to open an Image in new activity when clicked in viewpager?

I'm using viewpager to display the slideshow of the images but when I'm clicked on any one of the image it need to opened in new activity. 我正在使用viewpager来显示图像的幻灯片显示,但是当我单击任何图像时,都需要在新活动中打开它。 Can anyone help me? 谁能帮我?

I'm displaying toast message when clicked on image but my actually requirement is to open the image in new activity. 单击图像时显示的是吐司消息,但我的实际要求是在新活动中打开图像。

The code is below: 代码如下:

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);
}

} }

ImageOpeningActivity.class ImageOpeningActivity.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);
    }
}

} }

although i changed my code i getting an error, the error is below. 尽管我更改了代码但出现错误,但错误仍在下面。

 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);

First of all do this in your code instead of Toast. 首先,在代码中而不是Toast中执行此操作。 Comment out Toast and paste these lines. 注释掉Toast并粘贴这些行。

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

step2: Create activity with the name of ImageOpeningActivity and in its xml take a Imageview , let suppose its Id is myImageView then do following in your on create 第二步:创建名为ImageOpeningActivity的活动,并在其xml中获取一个Imageview,假设其ID为myImageView,然后在on create上执行以下操作

ImageView imageView = (ImageView) findViewById(R.id.myImageView);

    if(getIntent()!=null){
        int image  = getIntent().getExtras().getInt("MY_IMAGE");
        imageView.setImageResource(image);
    }

I am supposing that your images[position] is integer array. 我假设您的images [position]是整数数组。

put intent here in "listening to image click" 将意图放在“听图像点击”中

      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();
    }
}

create new activity with imageview in xml layout and call this from your viewpager image onclick 使用xml布局中的imageview创建新活动,然后从您的viewpager图片onclick调用此活动

Intent intent = new Intent(this, ImageDetailActivity.class);

intent.putExtra("image",images[i]);
startActivity(intent);

ImageDetailActivity.java ImageDetailActivity.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);
        }   

    }

Make sure you add this ImageDetailActivity to your android manifest file 确保您将此ImageDetailActivity添加到您的Android清单文件中

Like @Pratap said you can send image url from one activity to another. 就像@Pratap所说的那样,您可以将图片网址从一个活动发送到另一个活动。 But if you wanted to pass image itself as bitmap follow this method. 但是,如果您想将图像本身作为位图传递,请遵循此方法。 Bitmap implements Parcelable, so you can pass it as intent extra. 位图实现了可打包,因此您可以将其作为额外的意图传递。

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

and retrieve it in ImageDetailActivity by calling, 并通过调用在ImageDetailActivity中检索它,

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

Warning: Do not pass data more than 500Kb through Intent Refer this site 警告:不要通过超过500KB的数据更多的是通过意向 请参阅本网站

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM