- 番号リスト### 前提・実現したいこと
Activityから値をviewに渡し、各レイアウトページごとに違う画像を表示したいのですが、photo=0;の画像しか表示されません。
Activityの
Gameview.setphoto(photo)の部分が違うのか?
Viewクラスの
Public void setPhoto(int photo)の部分が違うのか?
色々と書き方を変えてみたりもしましたが、同じ画像(Waikikibeach)しか表示されません。
どのようにコードを書けば良いか教えて下さい。
レイアウトページとアクティビティは複数ですが、
Viewクラスは、全て同じviewクラスを使ってます。
発生している問題・エラーメッセージ
エラーメッセージはありません。
該当のソースコード
*waikikiActivity(本来は、photo=0ですが、画像が変わるかをチェックするため、あえて”1”にしています。
java
1public class WaikikipuzzleActivity extends AppCompatActivity { 2 3 private GameView gameView; 4 int level = 3; 5 private int photo = 1; 6 7 8 private InterstitialAd mInterstitialAd; 9 AdRequest adRequest_interstitial; 10 String AdMobID = "ca-app-pub-3940256099942544/1033173712"; 11 12 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_waikikipuzzle); 18 19 20省略 21 22 23 Toolbar toolbar = (Toolbar) findViewById(R.id.ac_toolbar_toolbar); 24 25 setSupportActionBar(toolbar); 26 gameView = (GameView) this.findViewById(R.id.game_view); 27 gameView.setPhoto(photo); 28 gameView.setOnFinishListener(new GameView.OnFinishListener(){ 29 @Override 30 public void onFinish() { 31 Toast.makeText(WaikikipuzzleActivity.this, "完成!", Toast.LENGTH_LONG).show(); 32 dialog2.show(); 33 34 35 } 36 37 }); 38 39省略
○view
java
1public class GameView extends View { 2 3 private Context mycontext; 4 private Random random = new Random(); 5 private int level = 3;//レベル(初期値は3分割) 6 private int padding = 3; 7 private int photo; 8 private Resources mResources; 9 private Bitmap mBitmap; 10 private Bitmap mBitmap1; 11 private ArrayList<Patch> patches; 12 private int viewH;//viewの高さ 13 private int viewW;//viewの幅 14 private int canvasH;//1つのピースを格納するキャンバスの高さ 15 private int canvasW;//幅 16 private int bitmapH;//1つのピースの高さ 17 private int bitmapW;//幅 18 19 private SoundPool soundPool;//おと 20 private int s_move;//移動OK 21 private int s_error;//移動NG 22 private OnFinishListener listener; 23 24 25 int[] mImageResources = { R.drawable.waikikibeach, R.drawable.diyamondophoto}; 26 27 public void setPhoto(int photo) { 28 this.photo = photo; 29 mResources = getResources(); 30 mBitmap1 = BitmapFactory.decodeResource(mResources, mImageResources[photo]); 31 32 } 33 34 public GameView(Context context){ 35 this(context, null); 36 } 37 public GameView(Context context, AttributeSet attrs) { 38 39 super(context, attrs); 40 mycontext = context; 41 mResources = getResources(); 42 mBitmap = ((BitmapDrawable)mResources.getDrawable(mImageResources[photo])).getBitmap(); 43 bitmapW = mBitmap.getWidth()/level; 44 bitmapH = mBitmap.getHeight()/level; 45 initPatches(); 46 initSound(); 47 } 48 49 //レベルで分割を変える 50 public void setLevel(int level){ 51 this.level = level; 52 bitmapW = mBitmap.getWidth()/level; 53 bitmapH = mBitmap.getHeight()/level; 54 canvasH = viewH/level; 55 canvasW = viewW/level; 56 initPatches(); 57 invalidate(); 58 } 59 60 //ピースの設置 61 public void setmBitmap(Bitmap bitmap){ 62 this.mBitmap = bitmap; 63 invalidate(); 64 } 65 66 public void setOnFinishListener(OnFinishListener listener){ 67 this.listener = listener; 68 } 69 70 //正方形の設定 71 @Override 72 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 73 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 74 int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); 75 int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); 76 int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); 77 if(heightSpecMode == MeasureSpec.AT_MOST){ 78 setMeasuredDimension(widthSpecSize,widthSpecSize); 79 } 80 } 81 82 @Override 83 protected void onDraw(Canvas canvas) { 84 super.onDraw(canvas); 85 drawAllPic(patches, canvas); 86 87 } 88 89 @Override 90 protected void onSizeChanged(int w, int h, int oldw, int oldh) { 91 super.onSizeChanged(w, h, oldw, oldh); 92 viewW = w; 93 viewH = h; 94 canvasW = w/level; 95 canvasH = h/level; 96 } 97 98 private void initSound(){ 99 //クリック時の音 100 soundPool=new SoundPool(2, AudioManager.STREAM_MUSIC,0); 101 s_move = soundPool.load(mycontext,R.raw.s_move,1); 102 s_error = soundPool.load(mycontext,R.raw.s_error,1); 103 } 104 105 private void initPatches(){ 106 patches = new ArrayList<Patch>(); 107 Patch emptyPatch = null; 108 for(int i = 0;i < level;i++){ 109 for(int j = 0;j < level;j++){ 110 Patch patch = new Patch(); 111 112 PicPoint bp = new PicPoint(); 113 bp.setX(i); 114 bp.setY(j); 115 116 PicPoint cp = new PicPoint(); 117 cp.setX(i); 118 cp.setY(j); 119 120 patch.setBitmapPicPoint(bp); 121 patch.setCanvasPicPoint(cp); 122 if(bp.getX() == (level - 1) && bp.getY() == (level - 1)){ 123 patch.setEmpty(true); 124 emptyPatch = patch; 125 } 126 patches.add(patch); 127 } 128 } 129 130 for(int i = 0;i < 50*level;i++){ 131 emptyPatch = exchange(emptyPatch); 132 } 133 134 } 135 136省略 137 138 139//画像を分割してピースを作る 140 private void drawPic(Canvas canvas,Patch patch){ 141 if(patch.isEmpty()){ 142 return; 143 } 144 Rect rb = new Rect(patch.getBitmapPicPoint().getX()*bitmapW + padding, patch.getBitmapPicPoint().getY()*bitmapH + padding, 145 (patch.getBitmapPicPoint().getX()+1)*bitmapW - padding, (patch.getBitmapPicPoint().getY()+1)*bitmapH - padding); 146 Rect rc = new Rect(patch.getCanvasPicPoint().getX()*canvasW + padding,patch.getCanvasPicPoint().getY()*canvasH + padding, 147 (patch.getCanvasPicPoint().getX()+1)*canvasW - padding, (patch.getCanvasPicPoint().getY()+1)*canvasH - padding); 148 149 canvas.drawBitmap(mBitmap, rb, rc, null); 150 } 151 152 153以下省略 154 155
試したこと
GameViewを以下のように変更してみましたが、画像が表示されませんでした。
java
1int[] mImageResources = { R.drawable.waikikibeach, R.drawable.diyamondophoto}; 2 3 public void setPhoto(int photo) { 4 this.photo = photo; 5 mResources = getResources(); 6 mBitmap1 = BitmapFactory.decodeResource(mResources, mImageResources[photo]); 7 8 } 9 10 public GameView(Context context){ 11 this(context, null); 12 } 13 public GameView(Context context, AttributeSet attrs) { 14 15 super(context, attrs); 16 mycontext = context; 17 mResources = getResources(); 18 mBitmap = ((BitmapDrawable)mResources.getDrawable(mImageResources[photo])).getBitmap(); 19 bitmapW = mBitmap.getWidth()/level; 20 bitmapH = mBitmap.getHeight()/level; 21 initPatches(); 22 initSound(); 23 24
補足情報(FW/ツールのバージョンなど)
GameViewは、昔、プロの方に作成してもらったコードで、今回、ゲーム要素を入れるために自分で改変しましたが、ネットで調べながら行ったので、なんとなくしかコード内容を理解できていません。
回答2件
あなたの回答
tips
プレビュー