Android通過(guò)ImageView設(shè)置手指滑動(dòng)控件縮放
ImageView設(shè)置手指滑動(dòng)縮放效果,具體實(shí)現(xiàn)步驟大家通過(guò)本文學(xué)習(xí)下吧!
實(shí)現(xiàn)步驟
1, imageview設(shè)置scaletype為 android:scaleType=”matrix”
2, 設(shè)置imageview的setOnTouchListener,重寫里面的代碼
3, 新建一個(gè)matrix,
matrix.postScale(scale,scale,縮放中心,縮放中心); image.setImageMatrix(matrix);
這樣image的大小就會(huì)改變了.
需要注意的幾點(diǎn)是 imageview一定要設(shè)置scaletype為matrix,否則圖片不能進(jìn)行縮放.而且Bitmap也可以通過(guò)Matrix改變大小.
也可以用自定義控件imageview,重寫里面的onTouchEvent,本文就是用的自定義控件得到方式實(shí)現(xiàn)的.
代碼
自定義控件的代碼,主要是重寫的onTouchEvent的代碼
package com.test.administrator.imageviewscale; import android.content.Context; import android.graphics.Matrix; import android.graphics.PointF; import android.renderscript.Float2; import android.renderscript.Float4; import android.util.AttributeSet; import android.util.FloatMath; import android.view.MotionEvent; import android.widget.ImageView; /** * Created by Administrator on 2016/3/21. */ public class MyImageView extends ImageView { private PointF centerPoint; private float firstdistance; private Matrix matrix; public MyImageView(Context context) { super(context); initParams(); } private void initParams() { matrix = new Matrix(); setImageMatrix(matrix); } public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); initParams(); } public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initParams(); } @Override public boolean onTouchEvent(MotionEvent event) { int count = event.getPointerCount(); if(count == 1){ switch (event.getAction()){ case MotionEvent.ACTION_DOWN: System.out.println("actiondown 1----"); break; case MotionEvent.ACTION_MOVE: System.out.println("actionmove 1----"); break; case MotionEvent.ACTION_UP: System.out.println("actionup 1----"); break; default: break; } }else if(count == 2){ switch (event.getAction()&MotionEvent.ACTION_MASK){ case MotionEvent.ACTION_POINTER_DOWN: firstdistance = getDistance(event); centerPoint = getCenterPoint(event); System.out.println("actiondown 2==="); break; case MotionEvent.ACTION_MOVE: float distance = getDistance(event); float scale = distance / firstdistance; matrix.postScale(scale,scale,centerPoint.x,centerPoint.y); setImageMatrix(matrix); System.out.println(scale + "===="); firstdistance = distance; System.out.println("actionmove 2==="); break; case MotionEvent.ACTION_UP: break; default: break; } } return true; } /** * 獲取兩個(gè)點(diǎn)的中心點(diǎn)坐標(biāo) * @param event */ private PointF getCenterPoint(MotionEvent event) { PointF point = new PointF(); point.x = (event.getX()+event.getX(1))/2; point.y = (event.getY()+event.getY(1))/2; return point; } /** * 兩根手指時(shí)手指間的距離 * @param event */ private float getDistance(MotionEvent event) { float x1 = event.getX(); float y1 = event.getY(); float x2 = event.getX(1); float y2 = event.getY(1); float distance = (float) Math.sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1- y2)); return distance; } }
imageview的代碼
<com.test.administrator.imageviewscale.MyImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:clickable="true" android:scaleType="matrix" android:src="@drawable/qq" />
總結(jié)
以上所述是小編給大家介紹的Android通過(guò)ImageView設(shè)置手指滑動(dòng)控件縮放,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android中View跟隨手指滑動(dòng)效果的實(shí)例代碼
- Android視頻播放器屏幕左側(cè)邊隨手指上下滑動(dòng)亮度調(diào)節(jié)功能的原理實(shí)現(xiàn)
- Android中解決頁(yè)簽手指按下從左到右滑動(dòng)的bug
- 封裝的android監(jiān)聽手指左右滑動(dòng)屏幕的事件類分享
- android中使用Activity實(shí)現(xiàn)監(jiān)聽手指上下左右滑動(dòng)
- 詳解Android使用CoordinatorLayout+AppBarLayout+CollapsingToolbarLayou實(shí)現(xiàn)手指滑動(dòng)效果
相關(guān)文章
Android 實(shí)現(xiàn)自定義圓形listview功能的實(shí)例代碼
這篇文章主要介紹了Android 實(shí)現(xiàn)自定義圓形listview功能的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Android簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)權(quán)限獲取相機(jī)權(quán)限及存儲(chǔ)空間等多權(quán)限
這篇文章主要介紹了Android簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)權(quán)限獲取相機(jī)權(quán)限及存儲(chǔ)空間等多權(quán)限,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07Android Bluetooth藍(lán)牙技術(shù)使用流程詳解
這篇文章主要介紹了Android Bluetooth藍(lán)牙技術(shù)使用流程詳解的相關(guān)資料,需要的朋友可以參考下2016-02-02Android進(jìn)階之Spinner下拉框的使用方法
這篇文章主要為大家詳細(xì)介紹了Android進(jìn)階之Spinner下拉框的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android 三行代碼實(shí)現(xiàn)高斯模糊效果
這篇文章主要介紹了Android 三行代碼實(shí)現(xiàn)高斯模糊效果,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Android實(shí)現(xiàn)底部圖片選擇Dialog
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)底部圖片選擇Dialog,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android實(shí)現(xiàn)圓圈倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圓圈倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08Android使用Theme自定義Activity進(jìn)入退出動(dòng)畫的方法
這篇文章主要介紹了Android使用Theme自定義Activity進(jìn)入退出動(dòng)畫的方法,涉及Android的Activity屬性設(shè)置與資源操作技巧,需要的朋友可以參考下2016-07-07