前提・実現したいこと
Android Studioでアプリ開発を行っています。言語はJavaです。
発生している問題・エラーメッセージ
タイトルの通り画像の任意の領域のクリック判定を行いたいと思い、調べていたところ、やりたいことにピッタリ合うソースコードを見つけました。
(以下そのリンク)
http://www110.kir.jp/Android/ch0505.html
しかし、勉強不足で文が何を表しているのか、イマイチ理解できません。
1,どの範囲をクリックしたら「タッチしました」というメッセージが表示されるのでしょうか。
2,mRegionとmBitmapはどのような関係で、どう対応しているのでしょうか。
ご指摘ありがとうございます。質問内容を修正しました。
よろしくお願いします。
該当のソースコード
java
1 2 3package jp.co.se.android.recipe.chapter05; 4 5import java.io.InputStream; 6 7import android.app.Activity; 8import android.content.Context; 9import android.graphics.Bitmap; 10import android.graphics.BitmapFactory; 11import android.graphics.Canvas; 12import android.graphics.Color; 13import android.graphics.Paint; 14import android.graphics.RectF; 15import android.graphics.Paint.Style; 16import android.graphics.Path; 17import android.graphics.Rect; 18import android.graphics.Region; 19import android.os.Bundle; 20import android.view.MotionEvent; 21import android.view.View; 22import android.widget.Toast; 23 24public class Ch0505 extends Activity { 25 26 @Override 27 protected void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 setContentView(new MyView(this)); 30 } 31 32 class MyView extends View { 33 private Bitmap mBitmap; 34 private Region mRegion = new Region(); 35 private Path mPath = new Path(); 36 private Paint mPaint = new Paint(); 37 38 public MyView(Context context) { 39 super(context); 40 41 try { 42 InputStream is = getResources().getAssets() 43 .open("sirokuma.jpg"); 44 mBitmap = BitmapFactory.decodeStream(is); 45 } catch (Exception e) { 46 } 47 48 mPaint.setColor(Color.RED); 49 mPaint.setStrokeWidth(3); 50 mPaint.setStyle(Style.STROKE); 51 52 Rect rect = new Rect(100, 100, 300, 300); 53 mPath.addRect(new RectF(rect), Path.Direction.CW); 54 mRegion.set(rect); 55 } 56 57 protected void onDraw(Canvas canvas) { 58 canvas.save(); 59 60 canvas.drawBitmap(mBitmap, 0, 0, null); 61 canvas.drawPath(mPath, mPaint); 62 63 canvas.restore(); 64 } 65 66 @Override 67 public boolean onTouchEvent(MotionEvent ev) { 68 if (ev.getAction() == MotionEvent.ACTION_UP) { 69 if (mRegion.contains((int) ev.getX(), (int) ev.getY())) { 70 Toast.makeText(getContext(), "タッチしました", Toast.LENGTH_SHORT) 71 .show(); 72 } 73 } 74 return true; 75 } 76 } 77} 78
補足情報(FW/ツールのバージョンなど)
Android Studioのバージョンは3.1.1です。
回答2件
あなたの回答
tips
プレビュー