[置顶] 简述如何嵌套使用Viewpager,点击图片放大查看图片,并且使用PhotoView进行图片处理
2016-09-20 10:02
806 查看
我们对于ViewPager都不陌生,我们可以用它来实现图片的轮播等功能,今天我把图片的轮播加上了点击图片查看图片,并且使用PhotoView放大缩小图片避免图片失贞等功能。
首先我们导入PhotoView的jar包;;
1.我们在主布局中很简单就是一个viewpager控件;;
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="400dp"
android:layout_height="400dp">
2.找三张图片放在assets文件中(assets自己创建,也可快捷创建:右击项目--new--Folder--Assets Folder即可创建)
3.写了三个类,首先是MainActivity类,存放图片资源代码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到viewpager控件
viewPager = (ViewPager) findViewById(R.id.viewpager);
try {
//实例集合
list=new ArrayList<View>();
//我存放的三张图片的name,得到一个流
InputStream a = getAssets().open("a.jpg");
InputStream b = getAssets().open("b.jpg");
InputStream c = getAssets().open("c.jpg");
//转化成bitmap
bitmapa = BitmapFactory.decodeStream(a);
bitmapb = BitmapFactory.decodeStream(b);
bitmapc = BitmapFactory.decodeStream(c);
} catch (IOException e) {
e.printStackTrace();
}
//new 三个Imageview 分别设置图片
ImageView ima = new ImageView(MainActivity.this);
ima.setImageBitmap(bitmapa);
ImageView imb = new ImageView(MainActivity.this);
imb.setImageBitmap(bitmapb);
ImageView imc = new ImageView(MainActivity.this);
imc.setImageBitmap(bitmapc);
//添加到list集合中
list.add(ima);
list.add(imb);
list.add(imc);
//设置适配器
MyAdapter adapter = new MyAdapter(getApplicationContext(), list);
viewPager.setAdapter(adapter);
//设置一个标志,可以左右滑动
viewPager.setCurrentItem(Integer.MAX_VALUE / 2);
}
下面是Adapter类:
public class MyAdapter extends PagerAdapter {
private Context context;
private ArrayList<View> list = new ArrayList<View>();
public My
ae52
Adapter(Context context, ArrayList<View> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
//获取父容器,判断是否为空,这里不能直接使用container,因为有可能并没有这个控件,所以我们直接用它的子控件获取父容器
//不为空的话就移除
if (list.get(position % list.size()).getParent() != null) {
((ViewPager) (list.get(position % list.size()).getParent())).removeView(list.get(position % list.size()));
}
//下面是两种判断方法,看点击的是那张图片,用哪一种都可以
// if (position%list.size()==0||position%list.size()==1||position%list.size()==2){
// list.get(position % list.size()).setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// Intent intent =new Intent(context,PotosViewText.class);
// if (position % list.size()==0){
// intent.putExtra("name","a.jpg");
// }else if (position % list.size()==1){
// intent.putExtra("name","b.jpg");
// }
// else {
// intent.putExtra("name", "c.jpg");
// }
// //加一个标志,在适配器里跳转需要加标志
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//在适配器中启动意图,需要用context去启动
// context.startActivity(intent);
// }
// });
// }
final Intent intent = new Intent(context, PotosViewText.class);
switch (position % list.size()) {
case 0:
list.get(0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent.putExtra("name", "a.jpg");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
break;
case 1:
list.get(1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent.putExtra("name", "b.jpg");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
break;
case 2:
list.get(2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent.putExtra("name", "c.jpg");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
break;
}
//添加视图
container.addView(list.get(position % list.size()));
return list.get(position % list.size());
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
}下面是工具类:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.potos_dmeo);
imageView = (ImageView) findViewById(R.id.imgeview);
Intent intent = getIntent();
if (intent == null) {
return;
}
//拿到字符串
String name = intent.getStringExtra("name");
try {
//得到这个流
open = getAssets().open(name);
//转换成bitmap
bitmap = BitmapFactory.decodeStream(open);
} catch (IOException e) {
e.printStackTrace();
}
//imageView.setImageBitmap(bitmap);
PhotoViewAttacher attacher = new PhotoViewAttacher(imageView);
dispPhotos(bitmap,open);
}
//下面是一个方法。通过PhotosView进行了图片处理
private void dispPhotos(Bitmap bt,InputStream is) {
bt = BitmapFactory.decodeStream(is);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
float Imagewidth = bitmap.getWidth();
float Imageheight = bitmap.getHeight();
WindowManager manager = getWindowManager();
Display display = manager.getDefaultDisplay();
float displaywidth = display.getWidth();
//拿到一个缩放比
float v = displaywidth / Imagewidth;
if (v == 0) {
v = 1;
}
float v1 = Imageheight * v;
LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams((int) displaywidth, (int) v1);
imageView.setLayoutParams(layout);
imageView.setImageBitmap(bt);
}
}
这样就完成了简单的viewpager轮播图片点击进行图片的查看以及使用photosview进行图片处理避免失贞,上面代码中都有详细注释,不懂得可以下面留言我会回复,不喜勿喷~~~
首先我们导入PhotoView的jar包;;
1.我们在主布局中很简单就是一个viewpager控件;;
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="400dp"
android:layout_height="400dp">
<span style="white-space:pre"> </span>
2.找三张图片放在assets文件中(assets自己创建,也可快捷创建:右击项目--new--Folder--Assets Folder即可创建)
3.写了三个类,首先是MainActivity类,存放图片资源代码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到viewpager控件
viewPager = (ViewPager) findViewById(R.id.viewpager);
try {
//实例集合
list=new ArrayList<View>();
//我存放的三张图片的name,得到一个流
InputStream a = getAssets().open("a.jpg");
InputStream b = getAssets().open("b.jpg");
InputStream c = getAssets().open("c.jpg");
//转化成bitmap
bitmapa = BitmapFactory.decodeStream(a);
bitmapb = BitmapFactory.decodeStream(b);
bitmapc = BitmapFactory.decodeStream(c);
} catch (IOException e) {
e.printStackTrace();
}
//new 三个Imageview 分别设置图片
ImageView ima = new ImageView(MainActivity.this);
ima.setImageBitmap(bitmapa);
ImageView imb = new ImageView(MainActivity.this);
imb.setImageBitmap(bitmapb);
ImageView imc = new ImageView(MainActivity.this);
imc.setImageBitmap(bitmapc);
//添加到list集合中
list.add(ima);
list.add(imb);
list.add(imc);
//设置适配器
MyAdapter adapter = new MyAdapter(getApplicationContext(), list);
viewPager.setAdapter(adapter);
//设置一个标志,可以左右滑动
viewPager.setCurrentItem(Integer.MAX_VALUE / 2);
}
下面是Adapter类:
public class MyAdapter extends PagerAdapter {
private Context context;
private ArrayList<View> list = new ArrayList<View>();
public My
ae52
Adapter(Context context, ArrayList<View> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
//获取父容器,判断是否为空,这里不能直接使用container,因为有可能并没有这个控件,所以我们直接用它的子控件获取父容器
//不为空的话就移除
if (list.get(position % list.size()).getParent() != null) {
((ViewPager) (list.get(position % list.size()).getParent())).removeView(list.get(position % list.size()));
}
//下面是两种判断方法,看点击的是那张图片,用哪一种都可以
// if (position%list.size()==0||position%list.size()==1||position%list.size()==2){
// list.get(position % list.size()).setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// Intent intent =new Intent(context,PotosViewText.class);
// if (position % list.size()==0){
// intent.putExtra("name","a.jpg");
// }else if (position % list.size()==1){
// intent.putExtra("name","b.jpg");
// }
// else {
// intent.putExtra("name", "c.jpg");
// }
// //加一个标志,在适配器里跳转需要加标志
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//在适配器中启动意图,需要用context去启动
// context.startActivity(intent);
// }
// });
// }
final Intent intent = new Intent(context, PotosViewText.class);
switch (position % list.size()) {
case 0:
list.get(0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent.putExtra("name", "a.jpg");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
break;
case 1:
list.get(1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent.putExtra("name", "b.jpg");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
break;
case 2:
list.get(2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent.putExtra("name", "c.jpg");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
break;
}
//添加视图
container.addView(list.get(position % list.size()));
return list.get(position % list.size());
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
}下面是工具类:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.potos_dmeo);
imageView = (ImageView) findViewById(R.id.imgeview);
Intent intent = getIntent();
if (intent == null) {
return;
}
//拿到字符串
String name = intent.getStringExtra("name");
try {
//得到这个流
open = getAssets().open(name);
//转换成bitmap
bitmap = BitmapFactory.decodeStream(open);
} catch (IOException e) {
e.printStackTrace();
}
//imageView.setImageBitmap(bitmap);
PhotoViewAttacher attacher = new PhotoViewAttacher(imageView);
dispPhotos(bitmap,open);
}
//下面是一个方法。通过PhotosView进行了图片处理
private void dispPhotos(Bitmap bt,InputStream is) {
bt = BitmapFactory.decodeStream(is);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
float Imagewidth = bitmap.getWidth();
float Imageheight = bitmap.getHeight();
WindowManager manager = getWindowManager();
Display display = manager.getDefaultDisplay();
float displaywidth = display.getWidth();
//拿到一个缩放比
float v = displaywidth / Imagewidth;
if (v == 0) {
v = 1;
}
float v1 = Imageheight * v;
LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams((int) displaywidth, (int) v1);
imageView.setLayoutParams(layout);
imageView.setImageBitmap(bt);
}
}
这样就完成了简单的viewpager轮播图片点击进行图片的查看以及使用photosview进行图片处理避免失贞,上面代码中都有详细注释,不懂得可以下面留言我会回复,不喜勿喷~~~
相关文章推荐
- ImageView+ViewPager+PhotoView实现朋友圈图片点击全屏查看支持放大缩小
- Android 在ViewPager中使用的可以画线,放大,保存,点击删除线条的自定义图片显示控件
- 使用photoview+viewpager实现图片缩放切换(类似微信朋友圈图片查看)
- Android中图片放大缩小(和ViewPager配合使用流畅显示)--第三方开源--PhotoView
- 图片放大缩小(和ViewPager配合使用流畅显示)--第三方开源--PhotoView
- 使用Android ViewPager与PhotoView实现图片滑动查看
- 使用ViewPager和Photoview实现图片左右滑动和放大缩小
- 图片放大缩小(和ViewPager配合使用流畅显示)--第三方开源--PhotoView
- RecyclerView + 九宫格图片 + ViewPager + PhotoView 实现列表图片点击放大并能缩放思路
- 图片放大缩小(和ViewPager配合使用流畅显示)--第三方开源--PhotoView
- Android 使用ViewPager结合PhotoView开源组件实现网络图片在线浏览功能
- viewpager嵌套多个Fragment并处理点击事件
- ViewPager加ImageView图片浏览中点击ImageView结束查看
- [置顶] viewPager+photoView实现图片轮播和手势缩放功能 支持手势缩放的imageView 如何实现相册左右滑动和手势缩放 如何让图片自适应控件大小 photoView如何使用(上)
- 使用JAVA如何对图片进行格式检查以及安全检查处理
- 使用JAVA如何对图片进行格式检查以及安全检查处理
- ListView嵌套viewpager 头部图片轮换,listview 进行下拉刷新
- PhotoView的使用--点击图片放大
- 使用JAVA如何对图片进行格式检查以及安全检查处理
- Android 使用ViewPager结合PhotoView开源组件实现网络图片在线浏览功能