


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)多點(diǎn)觸摸
Android中怎么實(shí)現(xiàn)多點(diǎn)觸摸,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。首先來看看我們的視圖類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
=
"請(qǐng)隨便觸摸屏幕進(jìn)行測(cè)試";
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能獲得輸入焦點(diǎn)
setFocusableInTouchMode(true);
//
確保能接收到觸屏事件
init();
}
private
void
init()
{
//
初始化10個(gè)不同顏色的畫筆
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)
{
//
獲得屏幕觸點(diǎn)數(shù)量
int
pointerCount
=
event.getPointerCount();
if
(pointerCount
>
MAX_TOUCHPOINTS)
{
pointerCount
=
MAX_TOUCHPOINTS;
}
//
鎖定Canvas,開始進(jìn)行相應(yīng)的界面處理
Canvas
c
=
getHolder().lockCanvas();
if
(c
!=
null)
{
c.drawColor(Color.BLACK);
if
(event.getAction()
==
MotionEvent.ACTION_UP)
{
//
當(dāng)手離開屏幕時(shí),清屏
}
else
{
//
先在屏幕上畫一個(gè)十字,然后畫一個(gè)圓
for
(int
i
=
0;
i
<
pointerCount;
i++)
{
//
獲取一個(gè)觸點(diǎn)的坐標(biāo),然后開始繪制
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;
}
/**
*
畫十字及坐標(biāo)信息
*
*
@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);
}
/*
*
進(jìn)入程序時(shí)背景畫成黑色,然后把“START_TEXT”寫到屏幕
*/
public
void
surfaceChanged(SurfaceHolder
holder,
int
format,
intwidth,
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.javapackage
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);
//隱藏標(biāo)題欄
re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025汽車轉(zhuǎn)讓合同模板
- 2025年雙邊貸款資金監(jiān)管協(xié)議(正式合同)
- 2025設(shè)備租賃合同標(biāo)準(zhǔn)版范本
- 2025中壓電冰箱購銷合同
- 會(huì)計(jì)崗位面試真題及答案
- 2025上海市戶外廣告投放合同
- 2025標(biāo)準(zhǔn)版租房合同的協(xié)議書范本
- 兩人合同范例
- 2025居間代理服務(wù)合同范本
- 亞馬遜品牌采購合同范例
- 高中學(xué)生法制教育
- 2025-2030中國延緩衰老食品行業(yè)深度調(diào)研及市場(chǎng)需求與投資研究報(bào)告
- 2025年中國汽車零部件市場(chǎng)研究報(bào)告-2025-04-零部件
- 2024-2025年部編版語文小學(xué)二年級(jí)下冊(cè)全冊(cè)單元測(cè)試題(共8個(gè)單元附答案)
- 中小企業(yè)涉稅風(fēng)險(xiǎn)防控與納稅籌劃-隨筆
- 一年級(jí)加減法口算練習(xí)題
- 醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范培訓(xùn)
- 四年級(jí)下冊(cè)勞動(dòng)《創(chuàng)意手提袋》課件
- 2025年福建能化集團(tuán)招聘筆試參考題庫含答案解析
- 第17課《第二次世界大戰(zhàn)》中職高一下學(xué)期高教版(2023)世界歷史全一冊(cè)
- 【MOOC】意在象中-中國古典詩詞鑒賞-北京師范大學(xué) 中國大學(xué)慕課MOOC答案
評(píng)論
0/150
提交評(píng)論