###前提・実現したいこと
Android studioでSurfaceViewを保存、表示を行いたいのですがどのようにプログラムしたらいいのかわかりません。
###該当のソースコード
SurfaceView を継承して絵を描画するクラス です。
java
1public class DrawSurfaceView extends SurfaceView implements Callback{ 2 3 private SurfaceHolder mHolder; 4 private Paint mPaint; 5 private Path mPath; 6 private Bitmap mLastDrawBitmap; 7 private Canvas mLastDrawCanvas; 8 private Deque<Path> mUndoStack = new ArrayDeque<Path>(); 9 private Deque<Path> mRedoStack = new ArrayDeque<Path>(); 10 11 SharedPreferences pref; 12 public DrawSurfaceView(Context context) { 13 super(context); 14 init(); 15 } 16 public DrawSurfaceView(Context context, AttributeSet attrs) { 17 super(context, attrs); 18 init(); 19 } 20 21 private void init() { 22 mHolder = getHolder(); 23 setZOrderOnTop(true); 24 mHolder.setFormat(PixelFormat.TRANSPARENT); 25 mHolder.addCallback(this); 26 // ペイントを設定 27 mPaint = new Paint(); 28 mPaint.setColor(Color.BLACK); 29 mPaint.setStyle(Paint.Style.STROKE); 30 mPaint.setStrokeCap(Paint.Cap.ROUND); 31 mPaint.setAntiAlias(true); 32 mPaint.setStrokeWidth(20); 33 } 34 35 @Override 36 public void surfaceCreated(SurfaceHolder holder) { 37 clearLastDrawBitmap(); 38 } 39 40 @Override 41 public void surfaceChanged(SurfaceHolder holder, int format, int width, 42 int height) { 43 } 44 @Override 45 public void surfaceDestroyed(SurfaceHolder holder) { 46 mLastDrawBitmap.recycle(); 47 } 48 private void clearLastDrawBitmap() { 49 if (mLastDrawBitmap == null) { 50 mLastDrawBitmap = Bitmap.createBitmap(getWidth(), getHeight(), 51 Config.ARGB_8888); 52 } 53 if (mLastDrawCanvas == null) { 54 mLastDrawCanvas = new Canvas(mLastDrawBitmap); 55 } 56 mLastDrawCanvas.drawColor(0, Mode.CLEAR); 57 } 58 @Override 59 public boolean onTouchEvent(MotionEvent event) { 60 switch (event.getAction()) { 61 case MotionEvent.ACTION_DOWN: 62 onTouchDown(event.getX(), event.getY()); 63 break; 64 case MotionEvent.ACTION_MOVE: 65 onTouchMove(event.getX(), event.getY()); 66 break; 67 case MotionEvent.ACTION_UP: 68 onTouchUp(event.getX(), event.getY()); 69 break; 70 default: 71 } 72 return true; 73 } 74 75 private void onTouchDown(float x, float y) { 76 mPath = new Path(); 77 mPath.moveTo(x, y); 78 } 79 80 private void onTouchMove(float x, float y) { 81 mPath.lineTo(x, y); 82 drawLine(mPath); 83 } 84 85 private void onTouchUp(float x, float y) { 86 mPath.lineTo(x, y); 87 drawLine(mPath); 88 mLastDrawCanvas.drawPath(mPath, mPaint); 89 mUndoStack.addLast(mPath); 90 mRedoStack.clear(); 91 } 92 93 private void drawLine(Path path) { 94 // ロックしてキャンバスを取得 95 Canvas canvas = mHolder.lockCanvas(); 96 // キャンバスをクリア 97 canvas.drawColor(0, Mode.CLEAR); 98 // 前回描画したビットマップをキャンバスに描画 99 canvas.drawBitmap(mLastDrawBitmap, 0, 0, null); 100 // パスを描画 101 canvas.drawPath(path, mPaint); 102 103 mHolder.unlockCanvasAndPost(canvas); 104 105 } 106 public void reset() {//リセット 107 mUndoStack.clear(); 108 mRedoStack.clear(); 109 clearLastDrawBitmap(); 110 Canvas canvas = mHolder.lockCanvas(); 111 canvas.drawColor(0, Mode.CLEAR); 112 mHolder.unlockCanvasAndPost(canvas); 113 } 114}
以下のプログラムのSurfaceView1を保存したいです。
java
1public class Problem1Activity extends FragmentActivity implements OnClickListener { 2 private DrawSurfaceView SurfaceView1; 3 private Button reset1; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_problem1); 9 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 10 11 12 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 13 fab.setOnClickListener(new View.OnClickListener() { 14 @Override 15 public void onClick(View view) { 16 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 17 .setAction("Action", null).show(); 18 } 19 }); 20 SurfaceView1 =(DrawSurfaceView) findViewById(R.id.surfaceView1); 21 22 reset1=(Button)findViewById(R.id.reset1); 23 reset1.setOnClickListener(this); 24 } 25 @Override 26 public void onClick(View v){ 27 if(v==reset1){ 28 SurfaceView1.reset(); 29 } 30 } 31 public void buttonClick1(View view){ 32 SurfaceView1.setDrawingCacheEnabled(true);// 33 Intent intent = new Intent(this,Problem1_g_Activity.class); 34 startActivity(intent); 35 } 36 37}
保存したSurfaceView1をここに表示したいです。
java
1public class Problem1_s_Activity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_problem1_s_); 7 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 8 setSupportActionBar(toolbar); 9 10 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 11 fab.setOnClickListener(new View.OnClickListener() { 12 @Override 13 public void onClick(View view) { 14 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 15 .setAction("Action", null).show(); 16 } 17 }); 18 } 19 public void onReturn1(View view){ 20 Intent intent= new Intent(this,Main2Activity.class); 21 startActivity(intent); 22 } 23 24}
回答1件
あなたの回答
tips
プレビュー