【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)多點(diǎn)觸摸_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)多點(diǎn)觸摸_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)多點(diǎn)觸摸_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論