前提・実現したいこと
Android Studioで絵を描くアプリを作成しようとしています。
ボタンを押した色で線を描きたいのですが、色を変えた際に今まで書いた線全ての色が変わってしまいます。
一つ前に戻るボタンも作成予定なので、そこも踏まえていい方法はないかと考えています。
上手くいかず困っているので、どうかアドバイスの方お願い致します。
初心者のため、分かりやすい表現等で伝えて頂けるとありがたいです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.MotionEvent; import android.view.View; import java.util.ArrayList; import static android.graphics.Color.rgb; import static app.myapplication1.R.drawable.kuro; import static app.myapplication1.R.drawable.pi; import static app.myapplication1.R.drawable.reset; import static app.myapplication1.R.drawable.ye; public class Oekaki3 extends AppCompatActivity { private Paint paint1; private Path path1; private ArrayList<Path> draw_List = new ArrayList<>(); private float pos_x, pos_y; int ket = 0; //ペンをセット protected void setPen(int selColor, float penWidth) { paint1 = new Paint(); paint1.setAntiAlias(true); paint1.setColor(selColor); paint1.setStyle(Paint.Style.STROKE); paint1.setStrokeWidth(penWidth); paint1.setStrokeCap(Paint.Cap.ROUND); paint1.setStrokeJoin(Paint.Join.ROUND); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_oekaki3); TextView textView = new TextView(this); setContentView(textView); setPen(rgb(0, 0, 0), 15);//黒 } class TextView extends View { private Paint paint2; private Path path2; public TextView(Context context) { super(context); this.path2 = new Path(); this.paint2 = new Paint(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPath(path2, paint2); canvas.drawColor(Color.rgb(255, 255, 255));//白 Path path = new Path(); paint2.setStyle(Paint.Style.STROKE); paint2.setStrokeWidth(5); Bitmap res = BitmapFactory.decodeResource(getResources(), reset); canvas.drawBitmap(res, 2350, 30, paint2); Bitmap ku = BitmapFactory.decodeResource(getResources(), kuro); canvas.drawBitmap(ku, 2350, 450, paint2); Bitmap kk = BitmapFactory.decodeResource(getResources(), ye); canvas.drawBitmap(kk, 2350, 600, paint2); Bitmap pp = BitmapFactory.decodeResource(getResources(), pi); canvas.drawBitmap(pp, 2350, 750, paint2); for (int i = 0; i < draw_List.size(); i++) { Path pt = draw_List.get(i); canvas.drawPath(pt, paint1); } if (path1 != null) { canvas.drawPath(path1, paint1); } } @Override public boolean onTouchEvent(MotionEvent event) {//タッチイベントの開始 pos_x = event.getX(); pos_y = event.getY(); Log.d("TouchEvent", "X:" + event.getX() + ",Y:" + event.getY()); if (pos_x > 2350 && pos_x < 2590 && pos_y > 50 && pos_y < 240) {//はじめから path1.reset(); draw_List.clear(); invalidate(); } else if (pos_x > 2350 && pos_x < 2590 && pos_y > 450 && pos_y < 600) { draw_List.add(path1); setPen(rgb(50, 50, 50), 20); //黒 } else if (pos_x > 2350 && pos_x < 2590 && pos_y > 600 && pos_y < 750) { draw_List.add(path1); paint1.setColor(rgb(255, 200, 80));//黄色 } else if (pos_x > 2350 && pos_x < 2590 && pos_y > 750 && pos_y < 900) { draw_List.add(path1); setPen(rgb(255, 203, 255), 20); //ピンク } else { //指のタッチ開始から、スライド、終わりまでの座標 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: path1 = new Path(); path1.moveTo(pos_x, pos_y); break; case MotionEvent.ACTION_MOVE: path1.lineTo(pos_x, pos_y); break; case MotionEvent.ACTION_UP: path1.lineTo(event.getX(), event.getY()); path2.reset(); draw_List.add(path1); break; } } invalidate(); return true;//タッチイベントの消費 } } }
試したこと
補足情報(FW/ツールのバージョンなど)
androidstudio3.0.1
読みにくいのでコードは```で囲ってください。
回答1件
あなたの回答
tips
プレビュー