Android輕松畫出觸摸軌跡
本文實例介紹了Android如何畫出觸摸軌跡的方法,分享給大家供大家參考,具體內(nèi)容如下
效果圖:
實現(xiàn)代碼:
package com.android.gameview5; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.os.Bundle; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.Window; import android.view.WindowManager; public class SurfaceViewActivity3 extends Activity { public void onCreate(Bundle s){ super.onCreate(s); //全屏顯示 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(new MyView(this)); } public class MyView extends SurfaceView implements Callback,Runnable{ public static final int TIME_IN_FRAME =50; Paint mPaint = null; Paint mTextPaint = null; SurfaceHolder mSurfaceHolder = null; boolean mRunning = false; Canvas mCanvas = null; private Path mPath; private float mPosX,mPosY; public MyView(Context context){ super(context); this.setFocusable(true); this.setFocusableInTouchMode(true); mSurfaceHolder = this.getHolder(); mSurfaceHolder.addCallback(this); mCanvas = new Canvas(); mPaint = new Paint(); mPaint.setColor(Color.BLACK); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(6); mPath = new Path(); mTextPaint = new Paint(); mTextPaint.setColor(Color.BLACK); mTextPaint.setTextSize(15); } public boolean onTouchEvent(MotionEvent event){ int action = event.getAction(); float x = event.getX(); float y = event.getY(); switch(action){ case MotionEvent.ACTION_DOWN: mPath.moveTo(x, y); break; case MotionEvent.ACTION_MOVE: mPath.quadTo(mPosX, mPosY, x, y); break; case MotionEvent.ACTION_UP: //mPath.reset(); break; } //記錄當(dāng)前觸摸點得當(dāng)前得坐標(biāo) mPosX = x; mPosY = y; return true; } private void onDraw(){ mCanvas.drawColor(Color.WHITE); //繪制曲線 mCanvas.drawPath(mPath, mPaint); mCanvas.drawText("當(dāng)前觸筆X:"+mPosX,0,20,mTextPaint); mCanvas.drawText("當(dāng)前觸筆Y:"+mPosY,0,40,mTextPaint); } public void run() { // TODO Auto-generated method stub while(mRunning){ long startTime = System.currentTimeMillis(); synchronized(mSurfaceHolder){ mCanvas = mSurfaceHolder.lockCanvas(); onDraw(); mSurfaceHolder.unlockCanvasAndPost(mCanvas); } long endTime = System.currentTimeMillis(); int diffTime = (int) (endTime - startTime); while(diffTime<=TIME_IN_FRAME){ diffTime =(int)(System.currentTimeMillis()-startTime); Thread.yield(); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { mRunning = true; new Thread(this).start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub mRunning = false; } } }
以上就是Android輕松畫出觸摸軌跡的具體方法,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Android控件系列之RadioButton與RadioGroup使用方法
本文介紹了Android中如何使用RadioGroup和RadioButton,對比了RadioButton和CheckBox的區(qū)別,并實現(xiàn)了自定義的RadioGroup中被選中RadioButton的變更監(jiān)聽事件2012-11-11修改Android FloatingActionButton的title的文字顏色及背景顏色實例詳解
這篇文章主要介紹了修改Android FloatingActionButton的title的文字顏色及背景顏色實例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03Android 物理游戲之重力系統(tǒng)開發(fā)示例代碼
介紹Android 物理游戲之重力系統(tǒng),這里提供了詳細(xì)的資料整理,并附示例代碼和實現(xiàn)效果圖,有興趣的小伙伴可以參考下2016-08-08Android使用ContentProvider實現(xiàn)查看系統(tǒng)短信功能
這篇文章主要為大家詳細(xì)介紹了Android使用ContentProvider實現(xiàn)查看系統(tǒng)短信功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11Android編程實現(xiàn)GridView控件點擊圖片變暗效果的方法
這篇文章主要介紹了Android編程實現(xiàn)GridView控件點擊圖片變暗效果的方法,簡單分析了GridView控件事件響應(yīng)及屬性操作的相關(guān)技巧,需要的朋友可以參考下2017-06-06viewPager+fragment刷新緩存fragment的方法
這篇文章主要介紹了viewPager+fragment刷新緩存fragment的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03Android WebView 不支持 H5 input type="file" 解決方法
這篇文章主要介紹了Android WebView 不支持 H5 input type="file" 解決方法,需要的朋友可以參考下2017-06-06