Android 程式 -- 手寫繪圖板
Android簡介使用方法開發工具開始寫程式視覺化介面視覺元件對話元件核心物件事件處理資料儲存查詢功能影音功能繪圖功能網路功能衛星地圖特殊功能資源管理裝置管理系統核心問題與回答刷機升級常用軟體Eclipse教學錄影訊息相關網站參考文獻最新修改簡體版English |
專案下載:DrawBoard.zip — 簡單手寫板,但是不能正確顯示兩筆劃以上的手寫。 執行結果![]() 程式範例:DrawBoard.javapackage ccc.android; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.os.Bundle; import android.view.View; public class DrawBoard extends Activity { public static final int openFile = 1, newFile = 2, saveFile = 3, help=4; List<PointF> points = new ArrayList<PointF>(); Panel mPanel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPanel = new Panel(this); setContentView(mPanel); } class Panel extends View { Paint mPaint = new Paint(); public Panel(Context context) { super(context); mPaint.setColor(Color.YELLOW); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(3); } @Override public void onDraw(Canvas canvas) { for (int i=1; i<points.size();i++) { canvas.drawLine(points.get(i-1).x,points.get(i-1).y, points.get(i).x,points.get(i).y, mPaint); } } @Override public boolean onTouchEvent(android.view.MotionEvent event) { for (int i = 0; i < event.getHistorySize(); i++) { points.add(new PointF(event.getHistoricalX(i), event.getHistoricalY(i))); } Panel.this.invalidate(); return true; // 代表該事件已被處理,不再向上傳遞了。 }; } } 問題:無法處理兩筆劃以上的情形,因此我們修改上述程式,以處理兩筆劃以上的情形。 第二版package ccc.android; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class DrawBoard extends Activity { public static final int menuClear = 1; List<PointF> points = new ArrayList<PointF>(); Panel mPanel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPanel = new Panel(this); setContentView(mPanel); } public boolean onCreateOptionsMenu(Menu menu) { // menu.add 參數: (int groupId, int itemId, int order, int titleRes) menu.add(0, menuClear, 0, "清除"); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case menuClear: points.clear(); mPanel.invalidate(); break; } return true; } class Panel extends View { Paint mPaint = new Paint(); public Panel(Context context) { super(context); mPaint.setColor(Color.YELLOW); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(3); } @Override public void onDraw(Canvas canvas) { for (int i=1; i<points.size();i++) { PointF p1 = points.get(i-1); PointF p2 = points.get(i); if (Math.abs(p1.x - p2.x) < 20 && Math.abs(p1.y - p2.y) < 20) { canvas.drawLine(p1.x,p1.y, p2.x, p2.y, mPaint); } } } @Override public boolean onTouchEvent(android.view.MotionEvent event) { for (int i = 0; i < event.getHistorySize(); i++) { points.add(new PointF(event.getHistoricalX(i), event.getHistoricalY(i))); } Panel.this.invalidate(); return true; // 代表該事件已被處理,不再向上傳遞了。 }; } } |
page revision: 3, last edited: 08 Dec 2010 03:57
你好,如果我想利用這個手寫功能來當作簽名
我下方menu想寫個儲存按扭 讓使用者寫好後儲存
儲存的程式該怎麼寫呢?
我想將這個簽名的檔存到sd卡裡
想請問 這個範例是不是畫太快就會斷斷續續的??
請問這個APP可以改成輸出手繪圖案的跟徑座標資料變成文字檔案嗎?
Post preview:
Close preview