下記の3をやりたいのですがやり方がわかりませんのでご教示お願い致します。
1.SurfaceViewで手書きして保存し、GridViewにて表示
2.GridViewにて選択した画像をSurfaceViewで表示
3.2で表示した画像に再度手書きしたい
現状は再度手書きすると表示した画像は消えますので残したまま手書きしたいです。
mDrawBitmap = mBitmap; とすると画像は消えませんが、当然手書きすると1回書いて次に書こうとすると前に書いた線は消えてしまいます。
色々やってみましたがわかりませんのでよろしくお願い致します。
java
1public class HandwriteSurfaceView extends SurfaceView implements Callback { 2 3 private SurfaceHolder mHolder; 4 private Paint mPaint; 5 private Path mPath; 6 private Bitmap mDrawBitmap; 7 private Canvas mDrawCanvas; 8 private Bitmap mBitmap = null; 9 10 public HandwriteSurfaceView(Context context) { 11 super(context); 12 init(); 13 } 14 15 public HandwriteSurfaceView(Context context, AttributeSet attrs) { 16 super(context, attrs); 17 init(); 18 } 19 20 private void init() { 21 mHolder = getHolder(); 22 setZOrderOnTop(true); 23 mHolder.setFormat(PixelFormat.TRANSPARENT); 24 mHolder.addCallback(this); 25 mPaint = new Paint(); 26 mPaint.setColor(Color.BLACK); 27 mPaint.setStyle(Paint.Style.STROKE); 28 mPaint.setStrokeCap(Paint.Cap.ROUND); 29 mPaint.setAntiAlias(true); 30 mPaint.setStrokeWidth(20); 31 } 32 33 // GridViewで選択した画像 34 public void setBitmap(Bitmap bitmap) { 35 this.mBitmap = bitmap; 36 } 37 38 @Override 39 public void surfaceCreated(SurfaceHolder holder) { 40 clearLastDrawBitmap(); 41 42 // GridViewで選択した画像を表示 43 if (mBitmap != null) { 44 Canvas canvas = mHolder.lockCanvas(); 45 canvas.drawBitmap(mBitmap, 0, 0, null); 46 mHolder.unlockCanvasAndPost(canvas); 47 } 48 } 49 50 @Override 51 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 52 } 53 54 @Override 55 public void surfaceDestroyed(SurfaceHolder holder) 56 mDrawBitmap.recycle(); 57 } 58 59 private void clearLastDrawBitmap() { 60 if (mDrawBitmap == null) { 61 mDrawBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888); 62 } 63 64 if (mDrawCanvas == null) { 65 mDrawCanvas = new Canvas(mDrawBitmap); 66 } 67 mDrawCanvas.drawColor(0xFFFFFFFF); 68 } 69 70 @Override 71 public boolean onTouchEvent(MotionEvent event) { 72 switch (event.getAction()) { 73 case MotionEvent.ACTION_DOWN: 74 onTouchDown(event.getX(), event.getY()); 75 break; 76 77 case MotionEvent.ACTION_MOVE: 78 onTouchMove(event.getX(), event.getY()); 79 break; 80 81 case MotionEvent.ACTION_UP: 82 onTouchUp(event.getX(), event.getY()); 83 break; 84 default: 85 } 86 return true; 87 } 88 89 private void onTouchDown(float x, float y) { 90 mPath = new Path(); 91 mPath.moveTo(x, y); 92 } 93 94 private void onTouchMove(float x, float y) { 95 mPath.lineTo(x, y); 96 drawLine(mPath); 97 } 98 99 private void onTouchUp(float x, float y) { 100 mPath.lineTo(x, y); 101 drawLine(mPath); 102 mDrawCanvas.drawPath(mPath, mPaint); 103 } 104 105 private void drawLine(Path path) { 106 Canvas canvas = mHolder.lockCanvas(); 107 canvas.drawColor(0, Mode.CLEAR); 108 canvas.drawBitmap(mDrawBitmap, 0, 0, null); 109 canvas.drawPath(path, mPaint); 110 mHolder.unlockCanvasAndPost(canvas); 111 } 112
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/07 01:47