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

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

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

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

Q&A

解決済

1回答

2186閲覧

GridViewで選択した画像をSurfaceViewで表示したい

hideohashimoto

総合スコア12

Android

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

0グッド

0クリップ

投稿2018/04/17 01:00

SurfaceViewで手書きした画像を内部ストレージに(複数)保存してそれをGridViewで表示し、それを選択すると再度SurfaceViewで表示したいのですがやり方がわかりません。

drawableにある画像をSurfaceViewに表示するやり方はわかったのですが、上記がわかりませんのでご教示お願い致します。

<MainActivity.java>

java

1import android.app.Activity; 2import android.content.Intent; 3import android.os.Bundle; 4import android.view.View; 5import android.view.View.OnClickListener; 6import android.widget.AdapterView; 7import android.widget.Button; 8import android.widget.GridView; 9 10import java.io.File; 11import java.util.ArrayList; 12import java.util.List; 13 14public class MainActivity extends Activity implements OnClickListener { 15 16 private Button mNewBtn; 17 private GridView gridView; 18 private GridAdapter gridAdapter; 19 private List<String> imgFilePaths = new ArrayList<String>(); 20 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 super.onCreate(savedInstanceState); 24 setContentView(R.layout.activity_main); 25 26 String filesDirectoryPath = getFilesDir().getPath(); 27 File[] imgFiles = new File(filesDirectoryPath).listFiles(); 28 29 for (File imgFile : imgFiles) { 30 imgFilePaths.add(imgFile.getAbsolutePath()); 31 } 32 33 gridView = findViewById(R.id.gridview); 34 gridAdapter = new GridAdapter(this, R.layout.grid_item, imgFilePaths); 35 gridView.setAdapter(gridAdapter); 36 37 gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 38 public void onItemClick(AdapterView parent, View v, int position, long id) { 39 //Toast.makeText(MemoList.this, "" + position, Toast.LENGTH_SHORT).show(); 40 Intent intent = new Intent(getApplication(), Main2Activity.class); 41 intent.putExtra("IMAGEID", imgFilePaths.get(position)); 42 startActivity(intent); 43 } 44 }); 45 } 46} 47

<Main2Activity.java>

java

1import android.content.Intent; 2import android.graphics.Bitmap; 3import android.graphics.BitmapFactory; 4import android.os.Bundle; 5import android.support.v7.app.AppCompatActivity; 6import android.util.Log; 7 8public class Main2Activity extends AppCompatActivity { 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_main2); 14 15 String IMAGEID = getIntent().getStringExtra("IMAGEID"); 16 if (IMAGEID != null) { 17 Intent intent = getIntent(); 18 String keyword = intent.getStringExtra("IMAGEID"); 19 Bitmap bitmap = BitmapFactory.decodeFile(keyword); //これをSurfaceViewで表示したい 20 Log.d("bitmap", "「" + bitmap + "」"); 21 } else { 22 } 23 } 24} 25

<SimpleSurface.java>

java

1import android.content.Context; 2import android.content.res.Resources; 3import android.graphics.Bitmap; 4import android.graphics.BitmapFactory; 5import android.graphics.Canvas; 6import android.graphics.Color; 7import android.graphics.Paint; 8import android.graphics.Path; 9import android.util.AttributeSet; 10import android.view.MotionEvent; 11import android.view.SurfaceHolder; 12import android.view.SurfaceView; 13 14public class SimpleSurface extends SurfaceView { 15 Path path; 16 Paint p; 17 18 public SimpleSurface(Context context, AttributeSet attrs, int defStyle) { 19 super(context, attrs, defStyle); 20 init(); 21 } 22 23 public SimpleSurface(Context context, AttributeSet attrs) { 24 super(context, attrs); 25 init(); 26 } 27 28 public SimpleSurface(Context context) { 29 super(context); 30 init(); 31 } 32 33 private void init() { 34 p = new Paint(); 35 p.setColor(Color.BLUE); 36 p.setStrokeWidth(3); 37 p.setStyle(Paint.Style.STROKE); 38 p.setStrokeJoin(Paint.Join.ROUND); 39 path = new Path(); 40 getHolder().addCallback( 41 new SurfaceHolder.Callback() { 42 public void surfaceChanged(SurfaceHolder holder, int format, int width, 43 int height) { 44 } 45 46 public void surfaceCreated(SurfaceHolder holder) { 47 draw(holder); 48 } 49 50 public void surfaceDestroyed(SurfaceHolder holder) { 51 } 52 } 53 ); 54 } 55 56 private void draw(SurfaceHolder holder) { 57 Canvas canvas = holder.lockCanvas(); 58 canvas.drawColor(Color.WHITE); 59 60    //ここをGridViewで選択した画像にしたい 61 /*Resources res = this.getContext().getResources(); 62 Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.finger);*/ 63 64 canvas.drawBitmap(bitmap, 0, 0, p); 65 canvas.drawPath(path, p); 66 holder.unlockCanvasAndPost(canvas); 67 } 68 69 @Override 70 public boolean onTouchEvent(MotionEvent event) { 71 switch (event.getAction()) { 72 case MotionEvent.ACTION_DOWN: 73 path.moveTo(event.getX(), event.getY()); 74 break; 75 case MotionEvent.ACTION_MOVE: 76 path.lineTo(event.getX(), event.getY()); 77 break; 78 case MotionEvent.ACTION_UP: 79 path.lineTo(event.getX(), event.getY()); 80 break; 81 } 82 draw(getHolder()); 83 return true; 84 } 85}

<activity_main2.xml>

xml

1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 > 6 7 <orust.co.jp.handwrite.SimpleSurface 8 android:id="@+id/ss" 9 android:layout_width="match_parent" 10 android:layout_height="match_parent" 11 /> 12 13</RelativeLayout>

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

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

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

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

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

guest

回答1

0

ベストアンサー

変数の渡し方がわからないという感じでしょうか?
このようにしてみてはいかがでしょう。

java

1public class Main2Activity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main2); 7 8 String IMAGEID = getIntent().getStringExtra("IMAGEID"); 9 if (IMAGEID != null) { 10 Intent intent = getIntent(); 11 String keyword = intent.getStringExtra("IMAGEID"); 12 Bitmap bitmap = BitmapFactory.decodeFile(keyword); //これをSurfaceViewで表示したい 13 14 // SimpleSurfaceを取得してBitmapをセットする 15 SimpleSurface ss = (SimpleSurface) findViewById(R.id.ss); 16 ss.setBitmap(bitmap); 17 } 18 } 19} 20 21public class SimpleSurface extends SurfaceView { 22 23 private Bitmap bitmap = null; 24 25 ... 26 27 public void setBitmap(Bitmap bitmap) { 28 this.bitmap = bitmap; 29 } 30 31 private void draw(SurfaceHolder holder) { 32 Canvas canvas = holder.lockCanvas(); 33 canvas.drawColor(Color.WHITE); 34 35 // bitmapがセットされていたら描画 36 if (bitmap != null) { 37 canvas.drawBitmap(bitmap, 0, 0, p); 38 } 39 40 canvas.drawPath(path, p); 41 holder.unlockCanvasAndPost(canvas); 42 } 43 44 ... 45}

投稿2018/04/25 07:21

編集2018/04/25 07:22
kakajika

総合スコア3131

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

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

hideohashimoto

2018/04/25 07:37

出来ました。ありがとうございます。 初心者でまだまだ分からないことだらけですががんばります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問