1. 程式人生 > >android photoview 圖片放大縮放功能 ImageView

android photoview 圖片放大縮放功能 ImageView

android 圖片瀏覽功能  圖片放大縮小  

使用 photoview 雙擊或雙指縮放的ImageView

使用多點觸控雙擊

滾動平滑滾動

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

實際效果參考 


圖片來自 : http://a.code4app.com/android/PhotoView/5241a4026803fa1327000000

下載完成後 匯入IDE裡面


將lib  新增進來


貼出 photoview的程式碼:

/*******************************************************************************
 * 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

謝謝大家

相關推薦

android photoview 圖片放大功能 ImageView

android 圖片瀏覽功能  圖片放大縮小   使用 photoview 雙擊或雙指縮放的ImageView 使用多點觸控和雙擊。 滾動,以平滑滾動甩。 github  下載地址:  https://github.com/chrisbanes/PhotoView

移動開發----PhotoView 圖片瀏覽控制元件

PhotoView 圖片瀏覽縮放控制元件 和普通的ImageView一樣的使用方法 如使用過程中有任何bug,意見或建議,可郵件給我 [email protected] 效果圖   注意 由於facebook的Fresco圖片載入元件所加載出來的d

viewPager+photoView實現圖片輪播和手勢功能 支援手勢imageView 如何實現相簿左右滑動和手勢 如何讓圖片自適應控制元件大小 photoView如何使用(上)

import uk.co.senab.photoview.IPhotoView; import uk.co.senab.photoview.PhotoViewAttacher; import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedList

Android 點選圖片放大展示 展示中可調節圖片顯示 圖片檢視器

1.首先需要初始化一個全域性常量 這個是常量的工具類 public final class GlobalConstant { private static int DEVICE_WIDTH; private static int D

viewPager+photoView實現網路圖片載入左右滑動+手勢功能+滑動到下一頁其他頁面恢復預設大小

前面兩篇文章,我們講了自定義viewpager+photoView實現本地圖片的載入和收縮縮放。實現本地相簿功能。 如果沒有看的話可以先閱讀以下,因為今天網路載入圖片的功能,實在這個基礎上做的修改,會基於之前的基礎上講解。 1.  http://blog.csdn.net

關於Unity中UGUI圖片Image實現仿視頻播放窗口的四角功能

重置 assert clas () strong unity 操作 寬度 腳本 應用方法:將下面腳本掛載在需要實現四角縮放功能的UI圖片上即可. 自定義拖拽精度(與邊界距離多少內觸發)m_validityWidth. 1 /********************

Android圖片處理--

div 大小 cep public date() andro file .get loader PS:在開發中我們會遇到一些圖片處理問題,比如說緩存圖片了、限制圖片大小了、查看圖片了等。上一篇文章介紹了圖片的全景效果查看,今天介紹一個圖片縮放,我們如果有時間的話,可以自己寫

ImageView(可以放大縮小)

由於專案需求的原因,最近一直在研究可縮放性ImageView,用本文來記錄一下最近所學: 該ImageView的實現功能有: 1)初步開啟時,圖片按比例滿屏(填充ImageView)顯示。 2)在放大縮小過程中,可以控制最大放大比例和最小縮小比例。 3)在縮放過程中,若圖片

android使用inSampleSize、inScaled、inDensity、inTargetDensity對圖片進行

本文首先總結一下Bitmap的相關概念,然後通過一個實際的問題來分析設定BitmapFactory.options的注意事項,以減少不必要的記憶體佔用率,避免發生OOM。 一、 Bitmap的使用trick 儘量不要使用setImageBitmap或setImageR

PHP例項————圖片等比例功能

在網站開發的過程中,經常要對一些圖片進行一些處理,比如說縮放,裁剪,加水印等等。當然這些功能不僅僅可以用在開發網站的過程中,平時需要對圖片做一些處理的時候,把這個功能封裝到函式中去,要處理圖片的時候,

c# WPF 中圖片功能,滑鼠拖動位置

<Window x:Class="LJDX.MainWindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://sc

java實現圖片裁剪、功能

import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.Buff

android仿微信錄製短視訊,拍照,自動聚焦,手動聚焦,滑動功能(Camera+TextureView+rxjava實現)

1:需求分析 先上圖看效果 a:拍照時,中間的拍照按鈕稍微小些,單擊可以拍照,長按時中間的拍照按鈕變大,並有進度提示拍攝視訊進度 b:中間區域可以手勢縮放,單擊時可以根據該點進行拍攝/拍照對焦,介面上顯示對焦動畫 c:長按拍攝視訊時手指在螢幕

android 呼叫原生圖片裁剪後的圖片尺寸

在安卓開發中,如果對拍照後的圖片進行圖片裁剪,如果是呼叫系統的裁剪,如下: /* * 裁剪圖片 */ private void cropPhoto() { Intent intent = new Intent("com.android.camera.act

鼠標滾輪實現圖片-------Day79

auto 生活 lis asc alt easy opera play log 今天是7月的最後一天了,不得不說,我定下的七月份剩余幾天的計劃是完不成了。一則工作確實緊了些,再則沒能處理好生活、工作和學習的節奏。這才是人生最大的課題吧。只是也還好。至少自己還在堅持著。事

使用Android的硬件技術優化執行效率

net opengl quest face 研究 roi ace 技術 https Unity3D研究院之使用Android的硬件縮放技術優化執行效率 http://www.xuanyusong.com/archives/3205 Android中GLSurfaceView

java處理圖片--圖片,旋轉和馬賽克化

add 大小 count fun ref translate markdown 文件 new 這是我自己結合網上的一些資料封裝的java圖片處理類,支持圖片的縮放,旋轉,馬賽克化。(轉載請註明出處:http://blog.csdn.net/u012116

QT中給各控件增加背景圖片(可可旋轉)的幾種方法

.net detail eight iou rotate art board 按鈕 previous 1. 給QPushButton 增加背景圖片:背景圖片可根據Button大小自由縮放。 [cpp] view plain copy vo

利用CSS3實現鼠標懸停在圖片圖片緩慢的兩種方法

class ansi clas form屬性 css transform 大小 方法 鼠標懸停 1.改變background-size屬性 將圖片作為某個html元素的背景圖片,用transition屬性改變圖片的大小。 1 .container{ 2 ba

圖片處理

gpo ram color format div files blog form body "c:\Program Files\ImageMagick-6.9.9-Q16\identify.exe" -format "%[fx:w]x%[fx:h]" 111.jpg