您的位置:首页 > 移动开发 > Android开发

android photoview 图片放大缩放功能 ImageView

2017-03-20 09:53 387 查看
转自:http://blog.csdn.net/aaawqqq/article/details/43128111

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

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

使用多点触控和双击。

滚动,以平滑滚动甩。

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

实际效果参考 



图片来自 : http://a.code4app.com/android/PhotoView/5241a4026803fa1327000000
下载完成后 导入IDE里面



将lib  添加进来



贴出 photoview的代码:

[java] view
plain copy

/******************************************************************************* 

 * Copyright 2011, 2012 Chris Banes. 

 * 

 * Licensed under the Apache License, Version 2.0 (the "License"); 

 * you may not use this file except in compliance with the License. 

 * You may obtain a copy of the License at 

 * 

 * http://www.apache.org/licenses/LICENSE-2.0 

 * 

 * Unless required by applicable law or agreed to in writing, software 

 * distributed under the License is distributed on an "AS IS" BASIS, 

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

 * See the License for the specific language governing permissions and 

 * limitations under the License. 

 *******************************************************************************/  

package uk.co.senab.photoview;  

  

import android.content.Context;  

import android.graphics.Bitmap;  

import android.graphics.Matrix;  

import android.graphics.RectF;  

import android.graphics.drawable.Drawable;  

import android.net.Uri;  

import android.util.AttributeSet;  

import android.view.GestureDetector;  

import android.widget.ImageView;  

  

import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;  

import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;  

import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;  

  

public class PhotoView extends ImageView implements IPhotoView {  

  

    private final PhotoViewAttacher mAttacher;  

  

    private ScaleType mPendingScaleType;  

  

    public PhotoView(Context context) {  

        this(context, null);  

    }  

  

    public PhotoView(Context context, AttributeSet attr) {  

        this(context, attr, 0);  

    }  

  

    public PhotoView(Context context, AttributeSet attr, int defStyle) {  

        super(context, attr, defStyle);  

        super.setScaleType(ScaleType.MATRIX);  

        mAttacher = new PhotoViewAttacher(this);  

  

        if (null != mPendingScaleType) {  

            setScaleType(mPendingScaleType);  

            mPendingScaleType = null;  

        }  

    }  

  

    /** 

     * @deprecated use {@link #setRotationTo(float)} 

     */  

    @Override  

    public void setPhotoViewRotation(float rotationDegree) {  

        mAttacher.setRotationTo(rotationDegree);  

    }  

      

    @Override  

    public void setRotationTo(float rotationDegree) {  

        mAttacher.setRotationTo(rotationDegree);  

    }  

  

    @Override  

    public void setRotationBy(float rotationDegree) {  

        mAttacher.setRotationBy(rotationDegree);  

    }  

  

    @Override  

    public boolean canZoom() {  

        return mAttacher.canZoom();  

    }  

  

    @Override  

    public RectF getDisplayRect() {  

        return mAttacher.getDisplayRect();  

    }  

  

    @Override  

    public Matrix getDisplayMatrix() {  

        return mAttacher.getDrawMatrix();  

    }  

  

    @Override  

    public boolean setDisplayMatrix(Matrix finalRectangle) {  

        return mAttacher.setDisplayMatrix(finalRectangle);  

    }  

  

    @Override  

    @Deprecated  

    public float getMinScale() {  

        return getMinimumScale();  

    }  

  

    @Override  

    public float getMinimumScale() {  

        return mAttacher.getMinimumScale();  

    }  

  

    @Override  

    @Deprecated  

    public float getMidScale() {  

        return getMediumScale();  

    }  

  

    @Override  

    public float getMediumScale() {  

        return mAttacher.getMediumScale();  

    }  

  

    @Override  

    @Deprecated  

    public float getMaxScale() {  

        return getMaximumScale();  

    }  

  

    @Override  

    public float getMaximumScale() {  

        return mAttacher.getMaximumScale();  

    }  

  

    @Override  

    public float getScale() {  

        return mAttacher.getScale();  

    }  

  

    @Override  

    public ScaleType getScaleType() {  

        return mAttacher.getScaleType();  

    }  

  

    @Override  

    public void setAllowParentInterceptOnEdge(boolean allow) {  

        mAttacher.setAllowParentInterceptOnEdge(allow);  

    }  

  

    @Override  

    @Deprecated  

    public void setMinScale(float minScale) {  

        setMinimumScale(minScale);  

    }  

  

    @Override  

    public void setMinimumScale(float minimumScale) {  

        mAttacher.setMinimumScale(minimumScale);  

    }  

  

    @Override  

    @Deprecated  

    public void setMidScale(float midScale) {  

        setMediumScale(midScale);  

    }  

  

    @Override  

    public void setMediumScale(float mediumScale) {  

        mAttacher.setMediumScale(mediumScale);  

    }  

  

    @Override  

    @Deprecated  

    public void setMaxScale(float maxScale) {  

        setMaximumScale(maxScale);  

    }  

  

    @Override  

    public void setMaximumScale(float maximumScale) {  

        mAttacher.setMaximumScale(maximumScale);  

    }  

  

    @Override  

    // setImageBitmap calls through to this method  

    public void setImageDrawable(Drawable drawable) {  

        super.setImageDrawable(drawable);  

        if (null != mAttacher) {  

            mAttacher.update();  

        }  

    }  

  

    @Override  

    public void setImageResource(int resId) {  

        super.setImageResource(resId);  

        if (null != mAttacher) {  

            mAttacher.update();  

        }  

    }  

  

    @Override  

    public void setImageURI(Uri uri) {  

        super.setImageURI(uri);  

        if (null != mAttacher) {  

            mAttacher.update();  

        }  

    }  

  

    @Override  

    public void setOnMatrixChangeListener(OnMatrixChangedListener listener) {  

        mAttacher.setOnMatrixChangeListener(listener);  

    }  

  

    @Override  

    public void setOnLongClickListener(OnLongClickListener l) {  

        mAttacher.setOnLongClickListener(l);  

    }  

  

    @Override  

    public void setOnPhotoTapListener(OnPhotoTapListener listener) {  

        mAttacher.setOnPhotoTapListener(listener);  

    }  

  

    @Override  

    public OnPhotoTapListener getOnPhotoTapListener() {  

        return mAttacher.getOnPhotoTapListener();  

    }  

  

    @Override  

    public void setOnViewTapListener(OnViewTapListener listener) {  

        mAttacher.setOnViewTapListener(listener);  

    }  

  

    @Override  

    public OnViewTapListener getOnViewTapListener() {  

        return mAttacher.getOnViewTapListener();  

    }  

  

    @Override  

    public void setScale(float scale) {  

        mAttacher.setScale(scale);  

    }  

  

    @Override  

    public void setScale(float scale, boolean animate) {  

        mAttacher.setScale(scale, animate);  

    }  

  

    @Override  

    public void setScale(float scale, float focalX, float focalY, boolean animate) {  

        mAttacher.setScale(scale, focalX, focalY, animate);  

    }  

  

    @Override  

    public void setScaleType(ScaleType scaleType) {  

        if (null != mAttacher) {  

            mAttacher.setScaleType(scaleType);  

        } else {  

            mPendingScaleType = scaleType;  

        }  

    }  

  

    @Override  

    public void setZoomable(boolean zoomable) {  

        mAttacher.setZoomable(zoomable);  

    }  

  

    @Override  

    public Bitmap getVisibleRectangleBitmap() {  

        return mAttacher.getVisibleRectangleBitmap();  

    }  

  

    @Override  

    public void setZoomTransitionDuration(int milliseconds) {  

        mAttacher.setZoomTransitionDuration(milliseconds);  

    }  

  

    @Override  

    public IPhotoView getIPhotoViewImplementation() {  

        return mAttacher;  

    }  

  

    @Override  

    public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener) {  

        mAttacher.setOnDoubleTapListener(newOnDoubleTapListener);  

    }  

  

    @Override  

    protected void onDetachedFromWindow() {  

        mAttacher.cleanup();  

        super.onDetachedFromWindow();  

    }  

  

}  

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

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

就能使用

如图:



非常方便快捷

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

谢谢大家
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: