今天在github看开源控件,试了一把代码家的PhotoView,结合ViewPager是真的好用,看效果图:
1.配置build.gradle:
//photoview
compile 'com.github.chrisbanes.photoview:library:1.2.4'
//glide
compile 'com.github.bumptech.glide:glide:3.6.1'
2.PhotoView的用法:
PhotoView的用法很简单,跟普通控件一样,设置宽、高、Id等。
使用的时候调用setImageResource()就可以了。例如:photoView.setImageResource(R.mipmap.ic_launcher);
3.ViewPager和PhotoView结合使用:
先来一个自定义的ViewPager:
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;
}
}
}
再来一个Adapter:
public class MyImageAdapter extends PagerAdapter {
private List<String> imageUrls;
private AppCompatActivity activity;
public MyImageAdapter(List<String> imageUrls, AppCompatActivity activity) {
this.imageUrls = imageUrls;
this.activity = activity;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
String url = imageUrls.get(position);
PhotoView photoView = new PhotoView(activity);
Glide.with(activity)
.load(url)
.placeholder(R.mipmap.ic_launcher)
.into(photoView);
container.addView(photoView);
photoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
activity.finish();
}
});
return photoView;
}
@Override
public int getCount() {
return imageUrls != null ? imageUrls.size() : 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
最后就是adctivity了:
public class PhotoViewActivity extends AppCompatActivity implements View.OnClickListener {
private PhotoViewPager mViewPager;
private int currentPosition;
private MyImageAdapter adapter;
private TextView mTvImageCount;
private TextView mTvSaveImage;
private List<String> Urls = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_photo_view);
initView();
initData();
}
private void initView() {
mViewPager = (PhotoViewPager) findViewById(R.id.view_pager_photo);
mTvImageCount = (TextView) findViewById(R.id.tv_image_count);
mTvSaveImage = (TextView) findViewById(R.id.tv_save_image_photo);
mTvSaveImage.setOnClickListener(this);
}
private void initData() {
Urls.add("http://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg");
Urls.add("http://pic62.nipic.com/file/20150319/12632424_132215178296_2.jpg");
Urls.add("http://t1.niutuku.com/960/24/24-617747.jpg");
Urls.add("http://bizhi.zhuoku.com/wall/jie/20070410/hzw/026.jpg");
Urls.add("http://pic.58pic.com/58pic/13/75/77/31J58PIC9nU_1024.png");
Urls.add("http://pic46.nipic.com/20140821/11624852_094342836667_2.jpg");
Urls.add("http://pic.90sjimg.com/back_pic/u/00/01/53/12/55ecfb7a16ade.jpg");
Urls.add("http://k73.com/up/allimg/120906/22-120Z6140234L9.jpg");
adapter = new MyImageAdapter(Urls, this);
mViewPager.setAdapter(adapter);
mViewPager.setCurrentItem(currentPosition, false);
mTvImageCount.setText(currentPosition+1 + "/" + Urls.size());
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
currentPosition = position;
mTvImageCount.setText(currentPosition + 1 + "/" + Urls.size());
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.tv_save_image_photo:
//save image
break;
}
}
}
大功告成!