android photoview 图片放大缩放功能 ImageView

转自:http://blog.csdn.net/aaawqqq/article/details/43128111

Android 图片浏览功能  图片放大缩小   

使用 photoview 双击或双指缩放的ImageView 

使用多点触控和双击。

滚动,以平滑滚动甩。


github  下载地址:  https://github.com/chrisbanes/PhotoView


实际效果参考 

《android photoview 图片放大缩放功能 ImageView》

图片来自 : http://a.code4app.com/android/PhotoView/5241a4026803fa1327000000

下载完成后 导入IDE里面

《android photoview 图片放大缩放功能 ImageView》

将lib  添加进来

《android photoview 图片放大缩放功能 ImageView》

贴出 photoview的代码:

[java] 
view plain
 copy

  1. /******************************************************************************* 
  2.  * Copyright 2011, 2012 Chris Banes. 
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the “License”); 
  5.  * you may not use this file except in compliance with the License. 
  6.  * You may obtain a copy of the License at 
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0 
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software 
  11.  * distributed under the License is distributed on an “AS IS” BASIS, 
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  * See the License for the specific language governing permissions and 
  14.  * limitations under the License. 
  15.  *******************************************************************************/  
  16. package uk.co.senab.photoview;  
  17.   
  18. import android.content.Context;  
  19. import android.graphics.Bitmap;  
  20. import android.graphics.Matrix;  
  21. import android.graphics.RectF;  
  22. import android.graphics.drawable.Drawable;  
  23. import android.net.Uri;  
  24. import android.util.AttributeSet;  
  25. import android.view.GestureDetector;  
  26. import android.widget.ImageView;  
  27.   
  28. import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;  
  29. import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;  
  30. import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;  
  31.   
  32. public class PhotoView extends ImageView implements IPhotoView {  
  33.   
  34.     private final PhotoViewAttacher mAttacher;  
  35.   
  36.     private ScaleType mPendingScaleType;  
  37.   
  38.     public PhotoView(Context context) {  
  39.         this(context, null);  
  40.     }  
  41.   
  42.     public PhotoView(Context context, AttributeSet attr) {  
  43.         this(context, attr, 0);  
  44.     }  
  45.   
  46.     public PhotoView(Context context, AttributeSet attr, int defStyle) {  
  47.         super(context, attr, defStyle);  
  48.         super.setScaleType(ScaleType.MATRIX);  
  49.         mAttacher = new PhotoViewAttacher(this);  
  50.   
  51.         if (null != mPendingScaleType) {  
  52.             setScaleType(mPendingScaleType);  
  53.             mPendingScaleType = null;  
  54.         }  
  55.     }  
  56.   
  57.     /** 
  58.      * @deprecated use {@link #setRotationTo(float)} 
  59.      */  
  60.     @Override  
  61.     public void setPhotoViewRotation(float rotationDegree) {  
  62.         mAttacher.setRotationTo(rotationDegree);  
  63.     }  
  64.       
  65.     @Override  
  66.     public void setRotationTo(float rotationDegree) {  
  67.         mAttacher.setRotationTo(rotationDegree);  
  68.     }  
  69.   
  70.     @Override  
  71.     public void setRotationBy(float rotationDegree) {  
  72.         mAttacher.setRotationBy(rotationDegree);  
  73.     }  
  74.   
  75.     @Override  
  76.     public boolean canZoom() {  
  77.         return mAttacher.canZoom();  
  78.     }  
  79.   
  80.     @Override  
  81.     public RectF getDisplayRect() {  
  82.         return mAttacher.getDisplayRect();  
  83.     }  
  84.   
  85.     @Override  
  86.     public Matrix getDisplayMatrix() {  
  87.         return mAttacher.getDrawMatrix();  
  88.     }  
  89.   
  90.     @Override  
  91.     public boolean setDisplayMatrix(Matrix finalRectangle) {  
  92.         return mAttacher.setDisplayMatrix(finalRectangle);  
  93.     }  
  94.   
  95.     @Override  
  96.     @Deprecated  
  97.     public float getMinScale() {  
  98.         return getMinimumScale();  
  99.     }  
  100.   
  101.     @Override  
  102.     public float getMinimumScale() {  
  103.         return mAttacher.getMinimumScale();  
  104.     }  
  105.   
  106.     @Override  
  107.     @Deprecated  
  108.     public float getMidScale() {  
  109.         return getMediumScale();  
  110.     }  
  111.   
  112.     @Override  
  113.     public float getMediumScale() {  
  114.         return mAttacher.getMediumScale();  
  115.     }  
  116.   
  117.     @Override  
  118.     @Deprecated  
  119.     public float getMaxScale() {  
  120.         return getMaximumScale();  
  121.     }  
  122.   
  123.     @Override  
  124.     public float getMaximumScale() {  
  125.         return mAttacher.getMaximumScale();  
  126.     }  
  127.   
  128.     @Override  
  129.     public float getScale() {  
  130.         return mAttacher.getScale();  
  131.     }  
  132.   
  133.     @Override  
  134.     public ScaleType getScaleType() {  
  135.         return mAttacher.getScaleType();  
  136.     }  
  137.   
  138.     @Override  
  139.     public void setAllowParentInterceptOnEdge(boolean allow) {  
  140.         mAttacher.setAllowParentInterceptOnEdge(allow);  
  141.     }  
  142.   
  143.     @Override  
  144.     @Deprecated  
  145.     public void setMinScale(float minScale) {  
  146.         setMinimumScale(minScale);  
  147.     }  
  148.   
  149.     @Override  
  150.     public void setMinimumScale(float minimumScale) {  
  151.         mAttacher.setMinimumScale(minimumScale);  
  152.     }  
  153.   
  154.     @Override  
  155.     @Deprecated  
  156.     public void setMidScale(float midScale) {  
  157.         setMediumScale(midScale);  
  158.     }  
  159.   
  160.     @Override  
  161.     public void setMediumScale(float mediumScale) {  
  162.         mAttacher.setMediumScale(mediumScale);  
  163.     }  
  164.   
  165.     @Override  
  166.     @Deprecated  
  167.     public void setMaxScale(float maxScale) {  
  168.         setMaximumScale(maxScale);  
  169.     }  
  170.   
  171.     @Override  
  172.     public void setMaximumScale(float maximumScale) {  
  173.         mAttacher.setMaximumScale(maximumScale);  
  174.     }  
  175.   
  176.     @Override  
  177.     // setImageBitmap calls through to this method  
  178.     public void setImageDrawable(Drawable drawable) {  
  179.         super.setImageDrawable(drawable);  
  180.         if (null != mAttacher) {  
  181.             mAttacher.update();  
  182.         }  
  183.     }  
  184.   
  185.     @Override  
  186.     public void setImageResource(int resId) {  
  187.         super.setImageResource(resId);  
  188.         if (null != mAttacher) {  
  189.             mAttacher.update();  
  190.         }  
  191.     }  
  192.   
  193.     @Override  
  194.     public void setImageURI(Uri uri) {  
  195.         super.setImageURI(uri);  
  196.         if (null != mAttacher) {  
  197.             mAttacher.update();  
  198.         }  
  199.     }  
  200.   
  201.     @Override  
  202.     public void setOnMatrixChangeListener(OnMatrixChangedListener listener) {  
  203.         mAttacher.setOnMatrixChangeListener(listener);  
  204.     }  
  205.   
  206.     @Override  
  207.     public void setOnLongClickListener(OnLongClickListener l) {  
  208.         mAttacher.setOnLongClickListener(l);  
  209.     }  
  210.   
  211.     @Override  
  212.     public void setOnPhotoTapListener(OnPhotoTapListener listener) {  
  213.         mAttacher.setOnPhotoTapListener(listener);  
  214.     }  
  215.   
  216.     @Override  
  217.     public OnPhotoTapListener getOnPhotoTapListener() {  
  218.         return mAttacher.getOnPhotoTapListener();  
  219.     }  
  220.   
  221.     @Override  
  222.     public void setOnViewTapListener(OnViewTapListener listener) {  
  223.         mAttacher.setOnViewTapListener(listener);  
  224.     }  
  225.   
  226.     @Override  
  227.     public OnViewTapListener getOnViewTapListener() {  
  228.         return mAttacher.getOnViewTapListener();  
  229.     }  
  230.   
  231.     @Override  
  232.     public void setScale(float scale) {  
  233.         mAttacher.setScale(scale);  
  234.     }  
  235.   
  236.     @Override  
  237.     public void setScale(float scale, boolean animate) {  
  238.         mAttacher.setScale(scale, animate);  
  239.     }  
  240.   
  241.     @Override  
  242.     public void setScale(float scale, float focalX, float focalY, boolean animate) {  
  243.         mAttacher.setScale(scale, focalX, focalY, animate);  
  244.     }  
  245.   
  246.     @Override  
  247.     public void setScaleType(ScaleType scaleType) {  
  248.         if (null != mAttacher) {  
  249.             mAttacher.setScaleType(scaleType);  
  250.         } else {  
  251.             mPendingScaleType = scaleType;  
  252.         }  
  253.     }  
  254.   
  255.     @Override  
  256.     public void setZoomable(boolean zoomable) {  
  257.         mAttacher.setZoomable(zoomable);  
  258.     }  
  259.   
  260.     @Override  
  261.     public Bitmap getVisibleRectangleBitmap() {  
  262.         return mAttacher.getVisibleRectangleBitmap();  
  263.     }  
  264.   
  265.     @Override  
  266.     public void setZoomTransitionDuration(int milliseconds) {  
  267.         mAttacher.setZoomTransitionDuration(milliseconds);  
  268.     }  
  269.   
  270.     @Override  
  271.     public IPhotoView getIPhotoViewImplementation() {  
  272.         return mAttacher;  
  273.     }  
  274.   
  275.     @Override  
  276.     public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener) {  
  277.         mAttacher.setOnDoubleTapListener(newOnDoubleTapListener);  
  278.     }  
  279.   
  280.     @Override  
  281.     protected void onDetachedFromWindow() {  
  282.         mAttacher.cleanup();  
  283.         super.onDetachedFromWindow();  
  284.     }  
  285.   
  286. }  

接下来将lib 导入自己的项目中使用  

在自己的项目中使用  只需要在 xml 文件里面将  原有的imageview  替换为  uk.co.senab.photoview.PhotoView  

就能使用

如图:

《android photoview 图片放大缩放功能 ImageView》

非常方便快捷

github  下载地址:  https://github.com/chrisbanes/PhotoView

谢谢大家

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/bsmmaoshenbo/article/details/64121860
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞