Android中的多點觸摸

來源:互聯網
上載者:User

標籤:

代碼
代碼一:自訂支援多點觸摸的TextView
http://download.csdn.net/detail/zhiyuan0932/9513852

什麼是多點觸摸

允許電腦使用者同時通過多個手指來控製圖形介面的一種技術

多點觸摸的應用情境
  • 對圖片、文字、網頁進行放大或者縮小
  • 多手指手勢操作自訂控制項和布局
觸摸事件的重要方法
  • event.getActionMasked(); 擷取事件類型
    在只使用單手指操作的時候,這個方法我們一般使用的是event.getAction(),來擷取事件類型,但是對於多個手指,我們使用event.getActionMasked()或者event.getAction() & MotionEvent.ACTION_MASK 來擷取支援多個手指觸摸的事件類型。

  • MotionEvent.ACTION_POINTER_DOWN 手指按下事件
    這個方法可以擷取到多個手指按下的狀態

  • MotionEvent.ACTION_POINTER_UP 手指抬起事件
    這個方法可以擷取到多個手指抬起的狀態

  • MotionEvent.ACTION_MOVE 手指移動事件

  • event.getPointerCount() 擷取手指個數
    這個方法是擷取當前手指的個數

案例一:通過兩指觸摸實現字型縮放
  • 在這裡直接貼代碼,首先貼出布局代碼
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <com.example.scaletextview.ZoomTextView        android:id="@+id/textView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_centerInParent="true"        android:gravity="center"        android:text="@string/hello_world"        android:textSize="30sp" /></RelativeLayout>
  • 貼出自訂支援多點觸控的TextView代碼
package com.example.scaletextview;import android.content.Context;import android.util.AttributeSet;import android.util.FloatMath;import android.util.Log;import android.view.MotionEvent;import android.widget.TextView;public class ZoomTextView extends TextView {    private static final String TAG = "ZoomTextView";    private float textSize;    private int mode;    private float oldDist;    public ZoomTextView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public ZoomTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public ZoomTextView(Context context) {        super(context);    }    /**     * 處理TextView的觸摸事件     */    @Override    public boolean onTouchEvent(MotionEvent event) {        //在一開始,計算當前字型的大小        if (textSize == 0) {            textSize = this.getTextSize();        }        // 擷取觸摸事件的類型,如果是單點是event.getAction(),當涉及到多點觸控時,就使用getActionMasked來擷取觸摸事件類型        switch (event.getActionMasked()) {        case MotionEvent.ACTION_POINTER_DOWN:            // 當手指按下的時候,就去擷取當前手指的間距            oldDist = spacing(event);            break;        case MotionEvent.ACTION_MOVE:            // 擷取當前觸摸點的個數            if (event.getPointerCount() >= 2) {                // 如果觸摸點>=2 擷取當前兩個手指的距離,然後進行縮放                float newDist = spacing(event);                zoom(newDist / oldDist);                //重新置位                oldDist = newDist;            }            break;        }        return true;    }    /**     * 不斷進行縮放     *      * @param f     */    private void zoom(float f) {        textSize *= f;        this.setTextSize(px2sp(getContext(), textSize));    }    /**     * 將px值轉換為sp值,保證文字大小不變     *      * @param pxValue     * @param fontScale     *            (DisplayMetrics類中屬性scaledDensity)     * @return     */    public static int px2sp(Context context, float pxValue) {        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;        return (int) (pxValue / fontScale + 0.5f);    }    /**     * 計算兩個手指的大小     *      * @param event     * @return     */    private float spacing(MotionEvent event) {        //擷取第一個點的x座標和第二個點的x座標        float x = event.getX(0) - event.getX(1);        //分別擷取y座標        float y = event.getY(0) - event.getY(1);        //使用勾股定理計算兩點距離        return FloatMath.sqrt(x * x + y * y);    }}

Android中的多點觸摸

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.