現在撮影した画像をタッチしてドラッグすることで線を描こうとしているのですが、線が描画されません。画面をタッチしてドラッグするとlogcatにはXとYの位置が表示されるのでタッチは検出できています。ということはCanvasの使い方が悪いのでしょうか?
下にソースコードを載せますので、間違いがあれば指摘していただきたいです。
よろしくお願いします。
lang
1public class PhotoMemoActivity extends Activity { 2 Uri uri_; 3 DrawCanvas drawCanvas_; 4 Bitmap bitmap_; 5 float firstX, firstY; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_photo_memo); 11 takePicture(); 12 drawCanvas_ = new DrawCanvas(getApplicationContext()); 13 } 14 15 @Override 16 protected void onActivityResult(int requestCode, int resultCode, Intent data){ 17 if(requestCode == 0){ 18 if(resultCode == RESULT_OK){ 19 ImageView imageView = (ImageView)findViewById(R.id.picture); 20 imageView.setImageURI(uri_); 21 Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); 22 bitmap_ = bitmap.copy(Bitmap.Config.ARGB_8888, true); 23 drawCanvas_.setBitmap(bitmap_); 24 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 25 } 26 } 27 } 28 29 public void takePicture(){ 30 String fileName = System.currentTimeMillis() + ".png"; 31 ContentValues values = new ContentValues(); 32 values.put(MediaStore.Images.Media.TITLE, fileName); 33 values.put(MediaStore.Images.Media.MIME_TYPE, "image/png"); 34 uri_ = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 35 36 Intent intent = new Intent(); 37 intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 38 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri_); 39 startActivityForResult(intent, 0); 40 } 41 42 @Override 43 public boolean onTouchEvent(MotionEvent event){ 44 switch (event.getAction()){ 45 case MotionEvent.ACTION_DOWN: 46 firstX = event.getX(); 47 firstY = event.getY(); 48 break; 49 case MotionEvent.ACTION_MOVE: 50 drawCanvas_.draw(firstX, firstY, event.getX(), event.getY()); 51 break; 52 default: 53 break; 54 } 55 return true; 56 } 57 58 @Override 59 public boolean onCreateOptionsMenu(Menu menu) { 60 getMenuInflater().inflate(R.menu.photo_memo, menu); 61 return true; 62 } 63 64 @Override 65 public boolean onOptionsItemSelected(MenuItem item) { 66 int id = item.getItemId(); 67 if (id == R.id.action_settings) { 68 return true; 69 } 70 return super.onOptionsItemSelected(item); 71 } 72} 73 74 75public class DrawCanvas extends View { 76 77 Paint p_; 78 Canvas canvas_; 79 80 81 public DrawCanvas(Context context){ 82 super(context); 83 p_ = new Paint(); 84 p_.setStyle(Paint.Style.FILL); 85 p_.setColor(Color.GREEN); 86 p_.setStrokeWidth(10); 87 } 88 89 public void setBitmap(Bitmap bitmap){ 90 canvas_ = new Canvas(bitmap); 91 } 92 93 public void draw(float startX, float startY, float stopX, float stopY){ 94 canvas_.drawLine(startX, startY, stopX, stopY, p_); 95 invalidate(); 96 } 97} 98
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。