質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

1回答

1861閲覧

撮影した写真に描画できない

退会済みユーザー

退会済みユーザー

総合スコア0

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2014/11/24 05:01

現在撮影した画像をタッチしてドラッグすることで線を描こうとしているのですが、線が描画されません。画面をタッチしてドラッグすると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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

下記2カ所コメント部分を修正すると、動くと思います。

lang

1@Override 2public boolean onTouchEvent(MotionEvent event){ 3 switch (event.getAction()){ 4 case MotionEvent.ACTION_DOWN: 5 firstX = event.getX(); 6 firstY = event.getY(); 7 break; 8 case MotionEvent.ACTION_UP: //ACTION_MOVEだとドラッグしたときに線が沢山描画されます。 9 drawCanvas_.draw(firstX, firstY, event.getX(), event.getY()); 10 //bitmap_ を表示 11 ImageView imageView = (ImageView)findViewById(R.id.picture); 12 imageView.setImageBitmap(bitmap_); 13 break; 14 default: 15 break; 16 } 17 return true; 18} 19

投稿2015/01/20 16:57

tokoi

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問