前言
这是一个图片查看库,可以实现图片浏览功能,支持手势或者点击缩放的功能,支持在ViewPager中使用,允许应用程序通知照片上的用户点击
使用方法:
首先在根build.gradle文件添加
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
然后在模块build.gradle添加库
dependencies {
//这里说明一下,官方文档给出的latest.release.here是根据版本而设置的
implementation 'com.github.chrisbanes:PhotoView:latest.release.here'
}
接着再xml布局使用
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/photo_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
最后再java文件调用即可
PhotoView photoView = (PhotoView) findViewById(R.id.photo_view);
photoView.setImageResource(R.mipmap.ceshi);
如果联网操作的话记得加网络权限,好多人太马虎了
在日常开发中,如果搭配ViewPager使用,到这就回出现问题,那是因为viewpager的切换与photoview的缩放有时候会有手势冲突,当缩放的时候会报出异常,根据官方文档提示,需要自己写一个自定义viewpager,重写onInterceptTouchEvent来解决该问题
//重写该方法来解决冲突问题 test.bawei.com.tupianosuofang.PhotoViewPager(自定义布局的全名自己//类的名字)
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
//写自己要处理的error包括报错日志
e.printStackTrace();
Log.e("TAG", "onInterceptTouchEvent: " );
return false;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private MyViewPager mVp;
private List<View> list = new ArrayList<>();
private int[] imgs = {R.mipmap.ceshi, R.mipmap.ceshi2, R.mipmap.ceshi3, R.mipmap.ceshi4};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList();
mVp = findViewById(R.id.mVp);
mVp.setAdapter(new VPAdapter());
}
private void initList() {
for (int i = 0; i < imgs.length; i++) {
View v = View.inflate(MainActivity.this, R.layout.adapter, null);
PhotoView photoView = v.findViewById(R.id.photo_view);
photoView.setImageResource(imgs[i]);
list.add(photoView);
}
}
/**
* 适配器
**/
public class VPAdapter extends PagerAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
int p = position % list.size();
//获取当前的照片
PhotoView img = (PhotoView) list.get(p);
//获取照片的父容器
ViewParent parent = img.getParent();
//判断父容器不是空的话,删除的当前位置的照片,进行下一步操作,增加新的照片
if (parent != null) {
ViewGroup vp = (ViewGroup) parent;
vp.removeView(list.get(p));
}
container.addView(list.get(p));
return list.get(p);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// super.destroyItem(container, position, object);
// container.removeView(list.get(position%list.size()));
}
}
}
MyViewPager.java
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
//这里就是我们想要处理的问题
e.printStackTrace();
Log.e("TAG", "onInterceptTouchEvent: " );
return false;
}
}
}
总结
微信的头像点击放大实现,很多App的图片显示响应手势按压实现
github
地址
版权声明:本文为m0_37711172原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。