-
支持缩放,
支持长图,支持左右滑动切换
加上viewpager后长图不能自动缩放到手机宽度,以后再优化
- 自定义PhotoViewPager
public class PhotoViewPager extends ViewPager {
public PhotoViewPager(Context context) {
super(context);
}
public PhotoViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
}
}
- xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fragment.ImgDetailFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="none">
</ScrollView>
<com.nanmu.weipo.common.PhotoViewPager
android:id="@+id/iv_imgDetail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@color/colorAccent"
app:srcCompat="@drawable/ic_wallpaper_green_100dp" />
</FrameLayout>
- Fragment:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
PhotoViewPager photoViewPager = getActivity().findViewById(R.id.iv_imgDetail);
// 这里是通过点击缩略图时,navigate过来带的参数,包含所有图片链接,点击的图片位置
List<PicUrlBean> picUrlBeanList = getArguments().getParcelableArrayList("urlList");
int position = getArguments().getInt("position");
// 创建一个List放Photoview
List<PhotoView> viewLists = new ArrayList<>();
for (int i=0; i < picUrlBeanList.size(); i++){
viewLists.add(new PhotoView(requireActivity()));
}
// 设置适配器,传递需要的参数
DetailPicAdapter adapter = new DetailPicAdapter(requireContext(), picUrlBeanList, viewLists);
photoViewPager.setAdapter(adapter);
photoViewPager.setCurrentItem(position); // 设置从第几张图片开始浏览
}
Adapter:
public class DetailPicAdapter extends PagerAdapter {
List<PicUrlBean> picUrlBeanList;
Context context;
List<PhotoView> photoViewArrayList;
public DetailPicAdapter(Context context, List<PicUrlBean> picUrlBeanList, List<PhotoView> photoViewArrayList) {
this.picUrlBeanList = picUrlBeanList;
this.context = context;
this.photoViewArrayList = photoViewArrayList;
}
@Override
public int getCount() {
return photoViewArrayList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
PhotoView photoView = photoViewArrayList.get(position);
// 处理缩略图链接,换成中型图
String thumbnail_pic = picUrlBeanList.get(position).getThumbnail_pic();
String bmiddle_pic = thumbnail_pic.replace("thumbnail","bmiddle");
// 网络请求图片
Glide.with(context)
.load(bmiddle_pic)
.placeholder(R.drawable.ic_launcher_background)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(photoView);
container.addView(photoView);
return photoView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}