2016-07-27 6 views
0

ボタンの行を作成して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; 
} 

} 

私は何かアドバイスに感謝します。

+0

「ステージ」とは何ですか? – 17slim

+0

こんにちは、ステージは、ビューを実装する別のクラスです。私は基本的にそこにそれを追加します。私はそれに数字でカスタムイメージを作りたいからです。私はポストにコードを追加しています。 – vince

答えて

0

あなたの要件を理解できませんでした。 しかし、特定の場所の代わりに他の場所をクリックするときに別の画面を開くには、上記のループの概念の代わりに、適切なクリックリスナーまたはタッチリスナーを使用する必要があります。

+0

よく、私は別の画面を呼びたいと思って私のビューをクリックします。私はループを作成していくつかのボタンを追加しました。これはかなり反復的です。 – vince

関連する問題