android實現(xiàn)多點觸摸應用
更新時間:2022年05月18日 11:14:54 作者:#冷風那個吹#
這篇文章主要為大家詳細介紹了android實現(xiàn)多點觸摸應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了android實現(xiàn)多點觸摸應用的具體代碼,供大家參考,具體內(nèi)容如下
JhkMultiTouchActivity.java
package com.android.forlinx; ? import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; ? public class JhkMultiTouchActivity extends Activity { ? ? /** Called when the activity is first created. */ ? ? @Override ? ? public void onCreate(Bundle savedInstanceState) { ? ? ? ? super.onCreate(savedInstanceState); ? ? ?// ? setContentView(R.layout.main); ? ? ? ?? ? ? ? //隱藏標題欄 ? ? ? ? ? ? ? ? ? requestWindowFeature(Window.FEATURE_NO_TITLE); ? ? ? ? ? ? ? ? //設置成全屏 ? ? ? ? ? ? ? ? ? getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, ? ? ? ? ? ? ? ? ? ? ? ? WindowManager.LayoutParams.FLAG_FULLSCREEN); ? ? ? ? ? ? ? ? //設置為上面的MTView ? ? ? ? ? ? ? ? setContentView(new MTView(this)); ? ? ? } }
MTView.java
package com.android.forlinx; ? ? import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; ? public class MTView extends SurfaceView implements SurfaceHolder.Callback { ? ?? ?private static final int MAX_TOUCHPOINTS = 10; ?? ?private static final String START_TEXT = "請隨便觸摸屏幕進行測試"; ?? ?private Paint textPaint = new Paint(); ?? ?private Paint touchPaints[] = new Paint[MAX_TOUCHPOINTS]; ?? ?private int colors[] = new int[MAX_TOUCHPOINTS]; ? ?? ?private int width, height; ?? ?private float scale = 1.0f; ? ?? ?public MTView(Context context) { ?? ??? ?super(context); ?? ??? ?SurfaceHolder holder = getHolder(); ?? ??? ?holder.addCallback(this); ?? ??? ?setFocusable(true); // 確保我們的View能獲得輸入焦點 ?? ??? ?setFocusableInTouchMode(true); // 確保能接收到觸屏事件 ?? ??? ?init(); ?? ?} ? ?? ?private void init() { ?? ??? ?// 初始化10個不同顏色的畫筆 ?? ??? ?textPaint.setColor(Color.GREEN); ?? ??? ?textPaint.setTypeface(null); ?? ??? ?textPaint.setAlpha(200); ?? ??? ?colors[0] = Color.BLUE; ?? ??? ?colors[1] = Color.RED; ?? ??? ?colors[2] = Color.GREEN; ?? ??? ?colors[3] = Color.YELLOW; ?? ??? ?colors[4] = Color.CYAN; ?? ??? ?colors[5] = Color.MAGENTA; ?? ??? ?colors[6] = Color.DKGRAY; ?? ??? ?colors[7] = Color.WHITE; ?? ??? ?colors[8] = Color.LTGRAY; ?? ??? ?colors[9] = Color.GRAY; ?? ??? ?for (int i = 0; i < MAX_TOUCHPOINTS; i++) { ?? ??? ??? ?touchPaints[i] = new Paint(); ?? ??? ??? ?touchPaints[i].setColor(colors[i]); ?? ??? ??? ?touchPaints[i].setAlpha(50); ?? ??? ?} ?? ?} ? ?? ?/* ?? ? * 處理觸屏事件 ?? ? */ ?? ?@Override ?? ?public boolean onTouchEvent(MotionEvent event) { ?? ??? ?// 獲得屏幕觸點數(shù)量 ?? ??? ?int pointerCount = event.getPointerCount(); ?? ??? ?if (pointerCount > MAX_TOUCHPOINTS) { ?? ??? ??? ?pointerCount = MAX_TOUCHPOINTS; ?? ??? ?} ?? ??? ? ?? ??? ?// 鎖定Canvas,開始進行相應的界面處理 ?? ??? ?Canvas c = getHolder().lockCanvas(); ?? ??? ?if (c != null) { ?? ??? ??? ?c.drawColor(Color.BLACK); ?? ??? ??? ?if (event.getAction() == MotionEvent.ACTION_UP) { ?? ??? ??? ??? ?// 當手離開屏幕時,清屏 ?? ??? ??? ?} else { ?? ??? ??? ??? ?// 先在屏幕上畫一個十字,然后畫一個圓 ?? ??? ??? ??? ?for (int i = 0; i < pointerCount; i++) { ?? ??? ??? ??? ??? ?// 獲取一個觸點的坐標,然后開始繪制 ?? ??? ??? ??? ??? ?int id = event.getPointerId(i); ?? ??? ??? ??? ??? ?int x = (int) event.getX(i); ?? ??? ??? ??? ??? ?int y = (int) event.getY(i); ?? ??? ??? ??? ??? ?drawCrosshairsAndText(x, y, touchPaints[id], i, id, c); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for (int i = 0; i < pointerCount; i++) { ?? ??? ??? ??? ??? ?int id = event.getPointerId(i); ?? ??? ??? ??? ??? ?int x = (int) event.getX(i); ?? ??? ??? ??? ??? ?int y = (int) event.getY(i); ?? ??? ??? ??? ??? ?drawCircle(x, y, touchPaints[id], c); ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?// 畫完后,unlock ?? ??? ??? ?getHolder().unlockCanvasAndPost(c); ?? ??? ?} ?? ??? ?return true; ?? ?} ? ?? ?/** ?? ? * 畫十字及坐標信息 ?? ? * ?? ? * @param x ?? ? * @param y ?? ? * @param paint ?? ? * @param ptr ?? ? * @param id ?? ? * @param c ?? ? */ ?? ?private void drawCrosshairsAndText(int x, int y, Paint paint, int ptr, ?? ??? ??? ?int id, Canvas c) { ?? ??? ?c.drawLine(0, y, width, y, paint); ?? ??? ?c.drawLine(x, 0, x, height, paint); ?? ??? ?int textY = (int) ((15 + 20 * ptr) * scale); ?? ??? ?c.drawText("x" + ptr + "=" + x, 10 * scale, textY, textPaint); ?? ??? ?c.drawText("y" + ptr + "=" + y, 70 * scale, textY, textPaint); ?? ??? ?c.drawText("id" + ptr + "=" + id, width - 55 * scale, textY, textPaint); ?? ?} ? ?? ?/** ?? ? * 畫圓 ?? ? * ?? ? * @param x ?? ? * @param y ?? ? * @param paint ?? ? * @param c ?? ? */ ?? ?private void drawCircle(int x, int y, Paint paint, Canvas c) { ?? ??? ?c.drawCircle(x, y, 40 * scale, paint); ?? ?} ? ?? ?/* ?? ? * 進入程序時背景畫成黑色,然后把“START_TEXT”寫到屏幕 ?? ? */ ?? ?public void surfaceChanged(SurfaceHolder holder, int format, int width, ?? ??? ??? ?int height) { ?? ??? ?this.width = width; ?? ??? ?this.height = height; ?? ??? ?if (width > height) { ?? ??? ??? ?this.scale = width / 480f; ?? ??? ?} else { ?? ??? ??? ?this.scale = height / 480f; ?? ??? ?} ?? ??? ?textPaint.setTextSize(14 * scale); ?? ??? ?Canvas c = getHolder().lockCanvas(); ?? ??? ?if (c != null) { ?? ??? ??? ?// 背景黑色 ?? ??? ??? ?c.drawColor(Color.BLACK); ?? ??? ??? ?float tWidth = textPaint.measureText(START_TEXT); ?? ??? ??? ?c.drawText(START_TEXT, width / 2 - tWidth / 2, height / 2, ?? ??? ??? ??? ??? ?textPaint); ?? ??? ??? ?getHolder().unlockCanvasAndPost(c); ?? ??? ?} ?? ?} ? ?? ?public void surfaceCreated(SurfaceHolder holder) { ?? ?} ? ?? ?public void surfaceDestroyed(SurfaceHolder holder) { ?? ?} ? }
效果圖
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android PopupWindow全屏詳細介紹及實例代碼
這篇文章主要介紹了 Android PopupWindow全屏詳細介紹及實例代碼的相關資料,需要的朋友可以參考下2016-12-12Android使用viewpager實現(xiàn)畫廊式效果
這篇文章主要為大家詳細介紹了Android使用viewpager實現(xiàn)畫廊式效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08Android滑動優(yōu)化高仿QQ6.0側滑菜單(滑動優(yōu)化)
之前的實現(xiàn)只是簡單的可以顯示和隱藏左側的菜單,但是特別生硬,而且沒有任何平滑的趨勢,那么今天就來優(yōu)化一下吧,加上平滑效果,而且可以根據(jù)手勢滑動的方向來判斷是否是顯示和隱藏2016-02-02深入解讀Android開發(fā)中Activity的生命周期
這篇文章主要介紹了Android開發(fā)中Activity的生命周期,包括Activity的停止和銷毀等重要內(nèi)容,非常推薦!需要的朋友可以參考下2015-12-12Android編程簡單解析JSON格式數(shù)據(jù)的方法示例
這篇文章主要介紹了Android編程簡單解析JSON格式數(shù)據(jù)的方法,結合實例形式分析了Android編程解析json格式數(shù)據(jù)的實現(xiàn)方法與相關操作技巧,需要的朋友可以參考下2017-08-08Android?autojs隨時翻譯剪貼板單詞實現(xiàn)示例
這篇文章主要為大家介紹了Android?autojs隨時翻譯剪貼板單詞,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09