[英]How to open an Image in new activity when clicked in viewpager?
我正在使用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);
}
}
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);
}
}
}
盡管我更改了代碼但出現錯誤,但錯誤仍在下面。
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);
首先,在代碼中而不是Toast中執行此操作。 注釋掉Toast並粘貼這些行。
Intent intent = new Intent(this, ImageOpeningActivity.class);
intent.putExtra("MY_IMAGE", images[position]);
context.startActivity(intent);
第二步:創建名為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);
}
我假設您的images [position]是整數數組。
將意圖放在“聽圖像點擊”中
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();
}
}
使用xml布局中的imageview創建新活動,然后從您的viewpager圖片onclick調用此活動
Intent intent = new Intent(this, ImageDetailActivity.class);
intent.putExtra("image",images[i]);
startActivity(intent);
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);
}
}
確保您將此ImageDetailActivity添加到您的Android清單文件中
就像@Pratap所說的那樣,您可以將圖片網址從一個活動發送到另一個活動。 但是,如果您想將圖像本身作為位圖傳遞,請遵循此方法。 位圖實現了可打包,因此您可以將其作為額外的意圖傳遞。
Intent intent = new Intent(this, ImageDetailActivity.class);
intent.putExtra("BitmapImage", bitmap);
並通過調用在ImageDetailActivity中檢索它,
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
警告:不要通過超過500KB的數據更多的是通過意向 請參閱本網站
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.