ボタンの行を作成してRelativeLayoutに追加しようとしています。 ボタンのonClickListenerがトリガしている点を除いて、画面のどの部分にも触れているだけで、すべてがうまくいくようです。それだけではなく、ビューの全体のレイアウトを聴いているどのように来る、レイアウトのどこでもMy ViewのonClickがトリガーされています
まず:
私は2つの質問をしたいと思います。
第2に、私がやっていることを実装するより良い方法はありますか?私は厄介だと思うボタンのグリッドを作成しています。私はJavaにはかなり新しいので、私がやっているのと同じような類似のクラスにはあまり慣れていません。
ここに私のコードの抜粋です:
final RelativeLayout idStageFrame = (RelativeLayout)findViewById(R.id.idStageFrame); //set to wrap_content
stageNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Place the button in a Grid Position
int placeX = 0;
int placeY = 0;
for (ctr = 0; ctr <= stageTotal - 1; ctr++){
stage[ctr] = new stageButtons(StageActivity.this, ctr + 1);
stage[ctr].putOnThisLocation(placeX, placeY);
stage[ctr].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startPlay = new Intent(StageActivity.this, MainActivity.class);
startActivity(startPlay); // It calls the next activity if I touched anywhere on screen.
finish();
}
});
idStageFrame.addView(stage[ctr]);
placeX++;
int z = (ctr + 1) % 4;
if (z== 0) {
placeY++;
placeX = 0;
}
}
ステージクラスは次のとおりです。
public class stageButtons extends View implements View.OnClickListener{
public int stageTag;
Context appBase;
Paint paint;
int butW;
int butH;
int putH;
int putW;
float charW;
public stageButtons(Context base, int tag){
super(base);
stageTag = tag;
appBase = base;
paint = new Paint();
paint.setTextSize(60);
}
@Override
protected void onDraw(Canvas c){
paint.setColor(Color.parseColor("#FFFFFF"));
paint.setAlpha(255)
c.drawBitmap(generateBitMap(stagePreview), putW, putH, paint);
c.drawText(String.valueOf(stageTag), putW + (butW/2) - (charW/2), putH + (butH/2) + (30), paint);
}
}
public void putOnThisLocation(int x, int y){
WindowManager wm = (WindowManager)appBase.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics display = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(display);
int screenWidth = display.widthPixels;
int screenHeight = display.heightPixels;
putW = x * (screenWidth/4) + 5;
putH = y * (screenHeight/4) + 5;
butH = (screenHeight/4) - 10;
butW = (screenWidth/4) - 10;
charW = paint.measureText(String.valueOf(stageTag));
}
private Bitmap generateBitMap(String bitMapName){
// generate Bitmap from Asset Folder
// required path to bitmap
Bitmap alienBitMap = null;
try{
BitmapFactory.Options opt = new BitmapFactory.Options();
InputStream bgStream = appBase.getAssets().open(bitMapName);
alienBitMap = BitmapFactory.decodeStream(bgStream, null, opt);
alienBitMap = Bitmap.createScaledBitmap(alienBitMap,butW, butH , true);
}
catch (IOException e){
e.printStackTrace();
}
return alienBitMap;
}
}
私は何かアドバイスに感謝します。
「ステージ」とは何ですか? – 17slim
こんにちは、ステージは、ビューを実装する別のクラスです。私は基本的にそこにそれを追加します。私はそれに数字でカスタムイメージを作りたいからです。私はポストにコードを追加しています。 – vince