- 番号リスト### 前提・実現したいこと
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は、昔、プロの方に作成してもらったコードで、今回、ゲーム要素を入れるために自分で改変しましたが、ネットで調べながら行ったので、なんとなくしかコード内容を理解できていません。
まだ回答がついていません
会員登録して回答してみよう