日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发之多点触摸(Multitouch)

發布時間:2025/3/15 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之多点触摸(Multitouch) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自: http://www.ideasandroid.com/archives/tag/surfaceview

???? 如果您對開發多點觸摸程序感興趣的話,那么本文將是一個很好的開始,android應用程序開發中,多點觸摸不是那么遙不可及,實現起來也很簡單,本例只需要兩個類就能實現多點觸摸。

首先來看看我們的視圖類MTView.java:

??

package?com.ideasandroid.demo;

import?android.content.Context;
import?android.graphics.Canvas;
import?android.graphics.Color;
import?android.graphics.Paint;
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.WHITE);
????????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]);
????????}
????}

????
/*
?????*?處理觸屏事件
?????
*/
????@Override
????
public?boolean?onTouchEvent(MotionEvent?event)?{
????????
//?獲得屏幕觸點數量
????????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)?{
????}

}

?

?

代碼中都做了相應的注釋,這里就不多說。

?? ? ? ?接下來看看我們的Activity,MultitouchVisible.java

?

?

package?com.ideasandroid.demo;

import?android.app.Activity;
import?android.os.Bundle;
import?android.view.Window;
import?android.view.WindowManager;

public?class?MultitouchVisible?extends?Activity?{
????@Override
????
public?void?onCreate(Bundle?savedInstanceState)?{
????????
super.onCreate(savedInstanceState);
????????
//隱藏標題欄
????????requestWindowFeature(Window.FEATURE_NO_TITLE);
????????
//設置成全屏
????????getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
????????????????WindowManager.LayoutParams.FLAG_FULLSCREEN);
????????
//設置為上面的MTView
????????setContentView(new?MTView(this));
????}
}

轉載于:https://www.cnblogs.com/KiloNet/archive/2011/03/29/1999238.html

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的Android开发之多点触摸(Multitouch)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。