我使用 viewpager 来显示图像的幻灯片,但是当我单击任何一张图像时,它需要在新活动中打开。有人可以帮助我吗?
单击图像时我显示 toast 消息,但我的实际要求是在新活动中打开图像。
代码如下:
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);
将意图放在“聆听图像点击”中
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:创建名为 ImageOpeningActivity 的活动,并在其 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 所说,您可以将图像 url 从一个活动发送到另一个活动。但如果您想将图像本身作为位图传递,请遵循此方法。 Bitmap 实现了 Parcelable,因此您可以将其作为意图额外传递。
Intent intent = new Intent(this, ImageDetailActivity.class);
intent.putExtra("BitmapImage", bitmap);
并通过调用在 ImageDetailActivity 中检索它,
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
警告:请勿通过 Intent 传递超过 500Kb 的数据参考此站点
在 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 清单文件中
您可以简单地通过 从 URL 加载来实现此目的...按照以下步骤操作:
Step-1:在您的 adapter.java 类中
首先将点击侦听器添加到要在新活动中打开的视图/图像...在此我正在以图像示例在新活动中打开。
//Set Event Click
view.setOnClickListener(v -> {
Intent new_intent = new Intent(context, YourActivity.class);
new_intent.putExtra("currentImg", imgList.get(position).getImage());
context.startActivity(new_intent);
});
在上面的代码中,您将看到以下代码:
new_intent.putExtra("currentImg", imgList.get(position).getImage());
这里imgList是您的图像数组列表,输入您的listArray名称,其余与给定代码相同。
Step-2:在 YourActivity.class 中,这是您要在其中显示该图像的其他活动。
启动您在 activity_your.xml 文件中创建的 imageView
示例:ImageView image;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your);
image = findViewById(R.id.image);
//Gif Url from myAdapter
String imageUrl = getIntent().getStringExtra("currentImg");
//Set Image
Glide.with(this)
.load(imageUrl)
.into(image);
}
在这里,您可以使用任何图像Libraray picasso/glide等来显示您的图像。我在这个例子中使用了glide。