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