昨日はその方法をiPhoneにて実現する方法を書きましたが、
今日はAndroid編です!
まず、Androidのサンプルに、FingerPaintというものがあります。
このサンプルは、指でなぞった軌跡を表示するというサンプルです。
これをベースにして、そのサンプルとWebViewを融合させます!
では、まず画像!!!
昨日とあまり代わり映えしないじゃんかぁ!!!
そりゃそうです^^;;;
iPhoneと同じ機能をAndroidで実現する訳ですから^^
こんな感じで、Webブラウザに手書きが出来てしまいます!!!
このマップ等で、この手書きが役にたちそうですね!
マップ等で場所を○て囲んで、そのスクリーンショットを送るとか!
いろんな使い方が出来るんじゃないでしょうかね?
今回はとっても簡単です!
Androidの場合は、WebViewを拡張すればすぐにできるのです!
ではソースです!
今回はポイントは特にないですかねぇ;;;
onTouchEventにてタッチイベントを取得して、そのイベントに応じて
線を書いていくだけの処理になります!
import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.MotionEvent; import android.webkit.WebView; public class WritableWebView extends WebView { private Path _writedPath = null; private Paint _paint = null; public WritableWebView(Context context) { super(context); _writedPath = new Path(); _paint = new Paint(Paint.DITHER_FLAG); _paint.setAntiAlias(true); _paint.setDither(true); _paint.setColor(0xFFFF0000); _paint.setStyle(Paint.Style.STROKE); _paint.setStrokeJoin(Paint.Join.ROUND); _paint.setStrokeCap(Paint.Cap.ROUND); _paint.setStrokeWidth(12); } public WritableWebView(Context context, AttributeSet attrs) { super(context, attrs); _writedPath = new Path(); _paint = new Paint(Paint.DITHER_FLAG); _paint.setAntiAlias(true); _paint.setDither(true); _paint.setColor(0xFFFF0000); _paint.setStyle(Paint.Style.STROKE); _paint.setStrokeJoin(Paint.Join.ROUND); _paint.setStrokeCap(Paint.Cap.ROUND); _paint.setStrokeWidth(12); } public WritableWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); _writedPath = new Path(); _paint = new Paint(Paint.DITHER_FLAG); _paint.setAntiAlias(true); _paint.setDither(true); _paint.setColor(0xFFFF0000); _paint.setStyle(Paint.Style.STROKE); _paint.setStrokeJoin(Paint.Join.ROUND); _paint.setStrokeCap(Paint.Cap.ROUND); _paint.setStrokeWidth(12); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPath(_writedPath, _paint); } private float mX, mY; private static final float TOUCH_TOLERANCE = 4; private void touch_start(float x, float y) { _writedPath.reset(); _writedPath.moveTo(x, y); mX = x; mY = y; } private void touch_move(float x, float y) { float dx = Math.abs(x - mX); float dy = Math.abs(y - mY); if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { _writedPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); mX = x; mY = y; } } private void touch_up() { _writedPath.lineTo(mX, mY); } @Override public boolean onTouchEvent(MotionEvent event) { if (_writable == true) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y); invalidate(); break; case MotionEvent.ACTION_MOVE: touch_move(x, y); invalidate(); break; case MotionEvent.ACTION_UP: touch_up(); invalidate(); break; } return true; } else { return super.onTouchEvent(event); } } }
こんな感じです!
あとは、このViewに対して、HTMLを読み込むようにすれば良いだけです!
こんな感じ
WritableWebView webview = (WritableWebView)findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://developerwaiwai.blogspot.jp/");
どうです?
簡単でしょ?
画像に落としたい場合には、DrawCacheを取得して、保存すればOK!
いじょ、Android版のWebブラウザ手書き機能についてでした!