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

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

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

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

解決済

Activityから値をviewに渡し、各レイアウトページごとに違う画像を表示したい

SanaeToyoda
SanaeToyoda

総合スコア1

Android

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

2回答

0評価

0クリップ

440閲覧

投稿2021/11/17 07:56

編集2021/11/19 01:12
  1. 番号リスト### 前提・実現したいこと

Activityから値をviewに渡し、各レイアウトページごとに違う画像を表示したいのですが、photo=0;の画像しか表示されません。
Activityの
Gameview.setphoto(photo)の部分が違うのか?
Viewクラスの
Public void setPhoto(int photo)の部分が違うのか?
色々と書き方を変えてみたりもしましたが、同じ画像(Waikikibeach)しか表示されません。

どのようにコードを書けば良いか教えて下さい。

レイアウトページとアクティビティは複数ですが、
Viewクラスは、全て同じviewクラスを使ってます。

発生している問題・エラーメッセージ

エラーメッセージはありません。

該当のソースコード

*waikikiActivity(本来は、photo=0ですが、画像が変わるかをチェックするため、あえて”1”にしています。

java

public class WaikikipuzzleActivity extends AppCompatActivity { private GameView gameView; int level = 3; private int photo = 1; private InterstitialAd mInterstitialAd; AdRequest adRequest_interstitial; String AdMobID = "ca-app-pub-3940256099942544/1033173712"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_waikikipuzzle); 省略 Toolbar toolbar = (Toolbar) findViewById(R.id.ac_toolbar_toolbar); setSupportActionBar(toolbar); gameView = (GameView) this.findViewById(R.id.game_view); gameView.setPhoto(photo); gameView.setOnFinishListener(new GameView.OnFinishListener(){ @Override public void onFinish() { Toast.makeText(WaikikipuzzleActivity.this, "完成!", Toast.LENGTH_LONG).show(); dialog2.show(); } }); 省略

○view

java

public class GameView extends View { private Context mycontext; private Random random = new Random(); private int level = 3;//レベル(初期値は3分割) private int padding = 3; private int photo; private Resources mResources; private Bitmap mBitmap; private Bitmap mBitmap1; private ArrayList<Patch> patches; private int viewH;//viewの高さ private int viewW;//viewの幅 private int canvasH;//1つのピースを格納するキャンバスの高さ private int canvasW;//幅 private int bitmapH;//1つのピースの高さ private int bitmapW;//幅 private SoundPool soundPool;//おと private int s_move;//移動OK private int s_error;//移動NG private OnFinishListener listener; int[] mImageResources = { R.drawable.waikikibeach, R.drawable.diyamondophoto}; public void setPhoto(int photo) { this.photo = photo; mResources = getResources(); mBitmap1 = BitmapFactory.decodeResource(mResources, mImageResources[photo]); } public GameView(Context context){ this(context, null); } public GameView(Context context, AttributeSet attrs) { super(context, attrs); mycontext = context; mResources = getResources(); mBitmap = ((BitmapDrawable)mResources.getDrawable(mImageResources[photo])).getBitmap(); bitmapW = mBitmap.getWidth()/level; bitmapH = mBitmap.getHeight()/level; initPatches(); initSound(); } //レベルで分割を変える public void setLevel(int level){ this.level = level; bitmapW = mBitmap.getWidth()/level; bitmapH = mBitmap.getHeight()/level; canvasH = viewH/level; canvasW = viewW/level; initPatches(); invalidate(); } //ピースの設置 public void setmBitmap(Bitmap bitmap){ this.mBitmap = bitmap; invalidate(); } public void setOnFinishListener(OnFinishListener listener){ this.listener = listener; } //正方形の設定 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); if(heightSpecMode == MeasureSpec.AT_MOST){ setMeasuredDimension(widthSpecSize,widthSpecSize); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawAllPic(patches, canvas); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); viewW = w; viewH = h; canvasW = w/level; canvasH = h/level; } private void initSound(){ //クリック時の音 soundPool=new SoundPool(2, AudioManager.STREAM_MUSIC,0); s_move = soundPool.load(mycontext,R.raw.s_move,1); s_error = soundPool.load(mycontext,R.raw.s_error,1); } private void initPatches(){ patches = new ArrayList<Patch>(); Patch emptyPatch = null; for(int i = 0;i < level;i++){ for(int j = 0;j < level;j++){ Patch patch = new Patch(); PicPoint bp = new PicPoint(); bp.setX(i); bp.setY(j); PicPoint cp = new PicPoint(); cp.setX(i); cp.setY(j); patch.setBitmapPicPoint(bp); patch.setCanvasPicPoint(cp); if(bp.getX() == (level - 1) && bp.getY() == (level - 1)){ patch.setEmpty(true); emptyPatch = patch; } patches.add(patch); } } for(int i = 0;i < 50*level;i++){ emptyPatch = exchange(emptyPatch); } } 省略 //画像を分割してピースを作る private void drawPic(Canvas canvas,Patch patch){ if(patch.isEmpty()){ return; } Rect rb = new Rect(patch.getBitmapPicPoint().getX()*bitmapW + padding, patch.getBitmapPicPoint().getY()*bitmapH + padding, (patch.getBitmapPicPoint().getX()+1)*bitmapW - padding, (patch.getBitmapPicPoint().getY()+1)*bitmapH - padding); Rect rc = new Rect(patch.getCanvasPicPoint().getX()*canvasW + padding,patch.getCanvasPicPoint().getY()*canvasH + padding, (patch.getCanvasPicPoint().getX()+1)*canvasW - padding, (patch.getCanvasPicPoint().getY()+1)*canvasH - padding); canvas.drawBitmap(mBitmap, rb, rc, null); } 以下省略

試したこと

GameViewを以下のように変更してみましたが、画像が表示されませんでした。

java

int[] mImageResources = { R.drawable.waikikibeach, R.drawable.diyamondophoto}; public void setPhoto(int photo) { this.photo = photo; mResources = getResources(); mBitmap1 = BitmapFactory.decodeResource(mResources, mImageResources[photo]); } public GameView(Context context){ this(context, null); } public GameView(Context context, AttributeSet attrs) { super(context, attrs); mycontext = context; mResources = getResources(); mBitmap = ((BitmapDrawable)mResources.getDrawable(mImageResources[photo])).getBitmap(); bitmapW = mBitmap.getWidth()/level; bitmapH = mBitmap.getHeight()/level; initPatches(); initSound();

補足情報(FW/ツールのバージョンなど)

GameViewは、昔、プロの方に作成してもらったコードで、今回、ゲーム要素を入れるために自分で改変しましたが、ネットで調べながら行ったので、なんとなくしかコード内容を理解できていません。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/11/17 09:49

コードはマークダウン記法を用いてご提示ください。 マークダウンに付きましてはヘルプをご参照ください。
jimbe

2021/11/17 10:36

編集ありがとうございます。綺麗にコードのマークダウンの中に表示されました。 ですが・・・残念ながらインデント(コードや xml で各行の先頭にあった空白部分)が無くなってしまっています。 恐らくご自身の開発環境ではインデントがそれぞれ入っていると思いますので、入っていましたら、再度コピペして頂けると完璧かと思います。
SanaeToyoda

2021/11/17 11:11

度々、申し訳ありません。 外出中で、今、PCがないので、帰宅後、確認して、再度、修正します。 ご迷惑をおかけして、申し訳ありません。
jimbe

2021/11/17 12:29

いえ、迷惑等ではありませんので、申し訳なくも思われなくて大丈夫です。 今後の為にもちょっと書き方等を変えて頂ければより良くなるように思いますということです。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Android

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