2016-06-15 8 views
0

画像ボタンがあり、ランダムに移動したいのですが、 どうすればよいか分かりませんでした。他の質問もしましたが、理解できませんでした。 画像ボタンを画面上でランダムに移動させ、移動しないようにするには、最初にすべてのデバイスと互換性がある必要があります。ランダムにImageButtonをレイアウト内で500msごとに移動

私はグリッドレイアウトでボタンを作って、それを個別に1000msに見えるようにしてみましたが、それは効率的な方法ではありません... これ以外の方法はありますか?

public void display(int x){ 
     String q=score.toString(); 
     s.setText(q); 
      switch (x) { 
       case 1: { 
        new Handler().postDelayed(new Runnable() { 

        @Override 
        public void run() { 

         b1.setVisibility(View.VISIBLE); 
         b1.setEnabled(true); 
         b1.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           score++; 

          } 
         }); 

        } 
       }, 1000); 


       new Handler().postDelayed(new Runnable() { 

        @Override 
        public void run() { 

         disable(); 
        int x=random(); 
        display(x); 
        } 
       }, 2000); 



      } 

答えて

0

複数のボタンを作成する代わりに、1を使用し、クリック時にsetXとsetYを使用して位置を変更することができます。

たとえば、

new Handler().postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     b1.setX(Enter random number within your screen boundary); 
     b1.setY(Enter random number within your screen boundary); 
    } 
}, 2000); 

あなたは、画面の境界を計算し、SETXとSETYの位置がボタンの表示の左上に適用されることを考慮しする必要があります。 APIについては

あなたは、以下のようにLayoutParamsを使用する必要があります、またはあなたも、ここでのコードを参照することができます8よりも低い(How can I dynamically set the position of view in Android?

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //WRAP_CONTENT param can be FILL_PARENT 
params.leftMargin = 206; //XCOORD 
params.topMargin = 206; //YCOORD 
childView.setLayoutParams(params); 
+0

どのように私は(すべてのデバイス)画面の境界を計算することができ –

+0

あなたはこの[方法の境界矩形を取得する方法からの回答](http://stackoverflow.com/questions/5730240/android-get-bounding-rectangle-of-a-view)からメソッドを試してみることができます。最初にランダムなXとYの値を生成し、メソッドが境界内にあるかどうかをチェックします。それが本当であれば、それを使用してボタンの位置を変更し、それ以外の場合は新しいX値とY値を生成します:)これはループして使用可能な値を生成します。 –

+0

これを試しましたが、起動時にアプリケーションがクラッシュします –

関連する問題