Android通過ImageView設(shè)置手指滑動(dòng)控件縮放
ImageView設(shè)置手指滑動(dòng)縮放效果,具體實(shí)現(xiàn)步驟大家通過本文學(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也可以通過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通過ImageView設(shè)置手指滑動(dòng)控件縮放,希望對(duì)大家有所幫助,如果大家有任何疑問請(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)攔截短信并屏蔽系統(tǒng)Notification的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)攔截短信并屏蔽系統(tǒng)Notification的方法,較為詳細(xì)的分析了Android短信與Notification的原理及對(duì)應(yīng)的設(shè)置取消技巧,需要的朋友可以參考下2015-12-12
Android倒計(jì)時(shí)控件 Splash界面5秒自動(dòng)跳轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Android倒計(jì)時(shí)控件,Splash界面5秒自動(dòng)跳轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Android圓形旋轉(zhuǎn)菜單開發(fā)實(shí)例
本文給大家分享一個(gè)動(dòng)畫菜單,基于android開發(fā)圓形旋轉(zhuǎn)菜單案例,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
Android開發(fā)實(shí)現(xiàn)讀取Assets下文件及文件寫入存儲(chǔ)卡的方法
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)讀取Assets下文件及文件寫入存儲(chǔ)卡的方法,涉及Android文件與目錄的讀取、寫入、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Android UI 之實(shí)現(xiàn)多級(jí)樹形列表TreeView示例
這篇文章主要介紹了Android UI 之實(shí)現(xiàn)多級(jí)列表TreeView示例,TreeView就是在Windows中常見的多級(jí)列表樹,有興趣的可以了解一下。2017-03-03
Android的Service應(yīng)用程序組件基本編寫方法
Service是一個(gè)android 系統(tǒng)中的應(yīng)用程序組件,它跟Activity的級(jí)別差不多,但是他沒有圖形化界面,不能自己運(yùn)行,只能后臺(tái)運(yùn)行,Service通常用來處理一些耗時(shí)比較長(zhǎng)的操作2012-12-12

