博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PhotoView
阅读量:4324 次
发布时间:2019-06-06

本文共 2591 字,大约阅读时间需要 8 分钟。

一、PhotoView的作用

    PhotoView是继承ImageView的自定义控件,支持双击或者双指缩放。不仅支持单个的ImageView,同时也能与ViewPager、ScollView等父控件很好的兼容,亦能与ImageLoader、Picasso等
异步加载网路图片的框架很好的兼容。

二、使用

    PhotoView的使用其实很简单,其关键点就是处理Touch事件和Matrix图形变换。

    1.单张图片的图形变换

         要想处理图片的图形变换,首先要获取 PhotoViewAttacher对象。
 
  1. PhotoViewAttacher mAttacher = new PhotoViewAttacher(photoView);
         photoView为findViewById获取到的PhotoView控件或者代码创建的PhotoView对象,也可以是ImageView。
         (1)设置图片能双击或者双指缩放
 
  1. mAttacher.setZoomable(!mAttacher.canZoom());
         (2)设置图片在控件中显示的样式
 
  1. mAttacher.setScaleType(ScaleType.CENTER_INSIDE);
         与ImageView所支持的样式相同。
         (3)设置图片点击(单击)后的事件,点击图片外的空白处无效。
 
  1. mAttacher.setOnPhotoTapListener(new OnPhotoTapListener() {
  2. @Override
  3. public void onPhotoTap(View arg0, float arg1, float arg2) {
  4. getActivity().finish();
  5. }
  6. });
         一般用ViewPager展示一组图片,点击某一张图片之后,可以查看占满屏幕的图片。其实是将ViewPager的点击事件设置为跳转到另外一个Activity中。该Activity中可以使用单个的ImageView(PhotoView),或者用ViewPager+ ImageView(PhotoView)实现所有图片的预览。设置该监听之后,用户点击图片,销毁当前Activity,即可实现图片预览效果。

    2、图片的旋转

         photo必须为PhotoView的实例。
         (1)设置图片旋转多少度
 
  1. photo.setRotationBy(10);
         参数是指图片旋转的角度。与Handler搭配使用即可实现图片的旋转动画。
          (2)设置图片旋转到哪个角度
 
  1. photo.setRotationTo(0);
         参数是指图片旋转到的角度。

    3、与ViewPager搭配使用

         一般使用ViewPager和PhotoView搭配使用时,都会自定义ViewPager,对ViewPager的拦截事件或者点击事件进行处理。
 
  1. public class HackyViewPager extends ViewPager {
  2. private boolean isLocked;//是否锁定ViewPager
  3. public HackyViewPager(Context context) {
  4. super(context);
  5. isLocked = false;
  6. }
  7. public HackyViewPager(Context context, AttributeSet attrs) {
  8. super(context, attrs);
  9. isLocked = false;
  10. }
  11. @Override
  12. public boolean onInterceptTouchEvent(MotionEvent ev) {
  13. if (!isLocked) {
  14. try {
  15. return super.onInterceptTouchEvent(ev);
  16. } catch (IllegalArgumentException e) {
  17. e.printStackTrace();
  18. return false;
  19. }
  20. }
  21. return false;
  22. }
  23. @Override
  24. public boolean onTouchEvent(MotionEvent event) {
  25. return !isLocked && super.onTouchEvent(event);
  26. }
  27. public void toggleLock() {
  28. isLocked = !isLocked;
  29. }
  30. public void setLocked(boolean isLocked) {
  31. this.isLocked = isLocked;
  32. }
  33. public boolean isLocked() {
  34. return isLocked;
  35. }
  36. }
         自定义一个类继承 PagerAdapter,
在该类中的instantiateItem的方法中返回PhotoView的实例或者包含PhotoView的布局填充的View对象,然后将该类的实例设置给ViewPager作为适配器。

    4、与网络图片加载框架继承

         与ImageView的使用方法一样,直接将对象作为参数传入即可。
         如果使用了三个参数的方法,需要在 onLoadingComplete方法中调用 mAttacher .update()方法。
 
  1. ImageLoader.getInstance().displayImage(mImageUrl, mImageView, new SimpleImageLoadingListener() {
  2. @Override
  3. public void onLoadingStarted(String imageUri, View view) {
  4. }
  5. @Override
  6. public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
  7. }
  8. @Override
  9. public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
  10. mAttacher.update();
  11. }
  12. });

转载于:https://www.cnblogs.com/Emotiona/p/5280781.html

你可能感兴趣的文章
[BZOJ 4010] 菜肴制作
查看>>
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
Django 学习笔记(五) --- Ajax 传输数据
查看>>
Spring boot 日志 Logback
查看>>
基于OWIN WebAPI 使用OAUTH2授权服务【授权码模式(Authorization Code)】
查看>>
[深入Maven源代码]maven绑定命令行参数到具体插件
查看>>
laravel 分页使用
查看>>
RobotFramework自动化2-自定义关键字
查看>>
centos6.4-x86-64系统更新系统自带Apache Http Server
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>