photoView:
效果:
一,先说下photoView
PhotoView的简介:
这是一个图片查看库,实现图片浏览功能,支持pinch(捏合)手势或者点击放大缩小。支持在ViewPager中翻页浏览图片。
PhotoView 是一款扩展自Android ImageView ,支持通过单点/多点触摸来进行图片缩放的智能控件。功能实用和强大。
PhotoView的功能:
图片浏览查看
双指缩放
单点触摸缩放
图片缩放模式设置
基本用法:
导入jar包,布局XML里设置PhotoView
将ImageView传入PhotoViewAttacher
但是如果要处理点击事件的话,就不能传入PhotoViewAttacher,要在布局作用
就是用photoView
代码演示:
使用 PhotoView进行网络图片和本地图片的加载,缩放和点击事件处理
iv_photo=(PhotoView) findViewById(R.id.iv_photo);
//加载本地图片缩放处理
iv_photo.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Toast.makeText(JkPhotoVIewActivity.this, "图片被长点击了", Toast.LENGTH_SHORT).show();
return false;
}
});
因为需求是吧图片长按跳出弹窗,实现图片的保存,所以写的是长按的点击事件,
如果点击的话实现这个方法:
iv_photo.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
@Override
public void onPhotoTap(View view, float x, float y) {
}
});
布局文件如下,
<uk.co.senab.photoview.PhotoView
android:id="@+id/iv_photo"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:src="@drawable/ao"
/>
图片加载出来就已经可以点击放大缩小了,
使用:配上ViewPages使用:
第一步:
导入一个PhotoView.arr包 下载地址 https://download.csdn.net/download/qq_35427437/10414437
第二步:
作为一个条目放入ViewPage中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<uk.co.senab.photoview.PhotoView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/item_detail_photoViewId"/>
</LinearLayout>
第三步:
初始化一个ViewPage
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/detail_image_load_activity">
</android.support.v4.view.ViewPager>
</LinearLayout>
public class DetailImageActiviry extends Activity{
private ViewPager viewPager;
public static String intentName="image";
private ArrayList<View> views;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activiry_detail_image);
viewPager = findViewById(R.id.detail_image_load_activity);
views=new ArrayList<>();
//传过来的值
ArrayList<DetailWebImage> images = (ArrayList<DetailWebImage>)getIntent().getSerializableExtra(intentName);
if(images!=null){
for (DetailWebImage item:images){
View view=View.inflate(this,R.layout.item_detail_image,null);
views.add(view);
}
}
DetailImageAdapter adapter = new DetailImageAdapter(images,views,this);
viewPager.setAdapter(adapter);
}
}
第四步:
Adapter实现
package netease.li.com.wangyiyun.news.adapter;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import java.util.ArrayList;
import netease.li.com.wangyiyun.R;
import netease.li.com.wangyiyun.news.bean.DetailWebImage;
import uk.co.senab.photoview.PhotoView;
public class DetailImageAdapter extends PagerAdapter {
ArrayList<DetailWebImage> images;
ArrayList<View> views;
Context context;
private DisplayImageOptions options;
public DetailImageAdapter(ArrayList<DetailWebImage> images, ArrayList<View> views, Context context){
this.images=images;
this.views=views;
this.context=context;
表示保存到本地磁盘
options = new DisplayImageOptions
.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
}
@Override
public int getCount() {
return images.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view=views.get(position);
PhotoView photoView=view.findViewById(R.id.item_detail_photoViewId);
ImageLoader.getInstance().displayImage(images.get(position).getSrc(),photoView,options);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
}
有问题可以在下方留言