2011年03月03日
ビットマップに落書きぃ
試しでonTouchEventとCanvasを使って
簡単な落書き機能を作ってみたぁ
具体的には
@Override
public boolean onTouchEvent(MotionEvent event) {
ImageView v2 = (ImageView) findViewById(R.id.imageView2);
float x = event.getX();
float y = event.getY();
int[] location = new int[2];
v2.getLocationOnScreen(location);
if(location[1] <= y && (v2.getHeight()+location[1]) >= y &&
location[0] <= x && (v2.getWidth() + location[0]) >= x ){
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
xmoveBaf = x;
ymoveBaf = y;
//break;
case MotionEvent.ACTION_UP:
//break;
case MotionEvent.ACTION_MOVE:
Canvas canvas = new Canvas(bitmap);
if(item.equals("ペン")){
Paint paint = new Paint();
paint.setColor(Color.YELLOW);
paint.setAlpha(150);
paint.setStrokeWidth(8);
//ライン作画
canvas.drawLine(x-location[0], y-location[1],
xmoveBaf-location[0], ymoveBaf-location[1], paint);
//円形作画
canvas.drawCircle(x-location[0], y-location[1], 4, paint);
}
if(item.equals("消しゴム")){
//画像一部を透過にする
int delpixels[] = new int[10*10];
//ピクセル配列全体を透過にする
for (int i = 0; i < 10*10; i++) {
delpixels[i] = 0x00000000;
}
//画像にピクセル配列をセット
//setPixels(ピクセル配列,配列の開始インデックス,配列の折返し位置,
// 画像へのセット位置x,画像へのセット位置y,セット画像の幅,セット画像の高さ)
bitmap.setPixels(delpixels, 0, 10, (int)(x-location[0]), (int)(y-location[1]), 10, 10);
}
v2.setImageBitmap(bitmap);
xmoveBaf = x;
ymoveBaf = y;
break;
case MotionEvent.ACTION_CANCEL:
break;
}
}
return super.onTouchEvent(event);
}
ですね
こんな感じに、なりましたぁ
「ペン」でペイントの際に
最初は円だけで作画したのですが
タッチを早く動かすと
タッチイベントのレスポンスで
円が、飛び飛びになってしまったので
円と円の間をラインで塗る処理を入れました。
作画に透過を入れてるので作画動作が解りやすいと思います。
スピナーの選択で
「消しゴム」にすると
10x10の範囲を透過にする
処理も入れてみましたぁ
投稿者:秀at 01:00| さんでープログラム(Android編) | コメント(0) | トラックバック(0)