//字體的放大縮小package com.xiaoyu.multi_touch;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.TextView;import android.widget.Toast;/** * 1.類的用途: * 2.作者:段玉 * 3.時間:2017/2/10 11 * 4.郵箱:1239959892@QQ.com */public class ScaleTextview extends TextView { //獲取兩個指頭之間的距離 PRivate double olddistance; private float textSize; public ScaleTextview(Context context) { super(context); } public ScaleTextview(Context context, AttributeSet attrs) { super(context, attrs); } public ScaleTextview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getActionMasked()){ case MotionEvent.ACTION_POINTER_DOWN: { //獲取字體大小 if (textSize == 0){ textSize = this.getTextSize(); //吐司 Toast.makeText(getContext(),textSize+"",Toast.LENGTH_SHORT).show(); } //獲取兩指之間的距離 olddistance = getdistance(event); } break; case MotionEvent.ACTION_MOVE: { //判斷當前有幾個手指 if (event.getPointerCount() >= 2){ //獲取滑動時兩指之間的距離 double distance = getdistance(event); //獲取按下時 和滑動時 兩指之間距離的比例 Zoom(distance / olddistance); //重置下按下的距離 olddistance = distance; } } break; } return true; } /** * 重新設置字體大小 * @param v */ private void Zoom(double v) { //對textview控件重新設置字體大小 textSize = (float) (textSize * v); //重新設置textview this.setTextSize(px2sp(getContext(),textSize)); } /** * 獲取兩指之間距離 * @param event * @return */ public double getdistance(MotionEvent event){ float x = event.getX(0); float x1 = event.getX(1); float y = event.getY(0); float y1 = event.getY(1); //根據勾股定理 取平方根 double sqrt = Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1)); return sqrt; } /** * 將px值轉換為sp值,保證文字大小不變 * @param context * @param pxValue * @return */ public int px2sp(Context context,float pxValue){ float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / scaledDensity + 0.5f); }}//簡單的xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.baway.multi_touch.ScaleTextview android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="30dp" android:text="淺寶寶_筱玉"/></LinearLayout>//圖片的放大縮小package com.xiaoyu.multi_touch;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * 1.類的用途: * 2.作者:段玉 * 3.時間:2017/2/10 14 * 4.郵箱:1239959892@qq.com */public class ScaleImageview extends View { private Bitmap bitmap; Matrix matrix = new Matrix(); private double olddistance; public ScaleImageview(Context context) { super(context); init(); } public ScaleImageview(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.nuan_bao); } public ScaleImageview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(bitmap,matrix,null); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getActionMasked()){ case MotionEvent.ACTION_POINTER_DOWN: { //獲取兩指之間距離 olddistance = getdistance(event); } break; case MotionEvent.ACTION_MOVE: { if (event.getPointerCount() >= 2){ //獲取移動中兩指之間的距離 double distance = getdistance(event); //獲取按下時 和滑動時 兩指之間距離的比例 zoom((float) (distance / olddistance)); olddistance = distance; } } break; } return true; } /** * 重新繪制圖片 * @param v */ private void zoom(float v) { //矩陣縮放 matrix.postScale(1.0f * v, 1.0f * v); //重新繪制 postInvalidate(); } //獲取兩指之間的距離 public double getdistance(MotionEvent event){ float x = event.getX(0); float x1 = event.getX(1); float y = event.getY(0); float y1 = event.getY(1); //取平方根 double sqrt = Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1)); return sqrt; }}
新聞熱點
疑難解答