2016-12-19 1 views
1

これは私の最初の質問ですので、私は間違いの可能性について謝ります。グラフィックスビューアンドロイドレイアウトの追加

私は自分のレイアウトに組み込まれたボタンを押すたびに赤い円を追加しようとしています。

<?xml version="1.0" encoding="utf-8"?>          
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"          
    android:layout_height="fill_parent"         
    android:orientation="vertical" >          

    <LinearLayout               
     android:id="@+id/panelJuego"          
     android:layout_width="match_parent"        
     android:layout_height="match_parent"        
     android:layout_weight="0.76"          
     android:orientation="horizontal" >         

    </LinearLayout>              

    <Button                
     android:id="@+id/button1"           
     style="?android:attr/buttonStyleSmall"        
     android:layout_width="wrap_content"        
     android:layout_height="wrap_content"        
     android:onClick="botonRojo"          
     android:text="Button" />           
</LinearLayout>               

私がしようとして関連するJavaコードは次のとおりです:私はすべての円がレイアウトに滞在したいと思います

実際
public void botonRojo(View v) {            
    LinearLayout panelJuego = (LinearLayout) findViewById(R.id.panelJuego); 
    PonCirculo circulo = new PonCirculo(this, 30, 30, "#FF0000");    
    circulo.setLayoutParams(new LinearLayout.LayoutParams(     
      LinearLayout.LayoutParams.WRAP_CONTENT,       
      LinearLayout.LayoutParams.WRAP_CONTENT));       
    panelJuego.addView(circulo);            
}                    


public class PonCirculo extends View {           
    private int radio = 30;             
    private String color;              
    public PonCirculo(Context context, int x, int y, String color) {   
     super(context);              
     Cx = Cx + x;               
     Cy = Cy + y;               
     this.color = color;             
    }                   
    @Override                 
    protected void onDraw(Canvas canvas) {          
     super.onDraw(canvas);             
     Paint paint = new Paint();            
    paint.setStyle(Paint.Style.FILL);           
    paint.setColor(Color.parseColor(color));         
    canvas.drawCircle(Cx, Cy, radio, paint);         
}                    

私は赤の黒丸は、Androidの画面に表示されるボタンを押すたびにしかし、もう一度ボタンを押すと、新しい円が現れ、フォマーが消えます。誰でも助けてくれますか?ありがとう。

+0

fomerは何ですか? –

+0

申し訳ありませんが、それは間違いでした、私は "元"、元の円を意味しました。 – GGG

答えて

0

私は、ボタンを押したときにお互いの下にそれぞれの円を追加しようとしていると仮定しています。

現在のところ、新しいビューを追加していますが、前のビューを上書きしています。新しいサークルに一意のIDを与えるビューを追加する必要があります。次に、新しいサークルを下に置くか、選択した任意の位置に配置します。私は、相対レイアウトを使用するように変更したサンプルコードをいくつか挙げています。そして、それぞれの円を前のものの下に置きます。

レイアウト例:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/relativeCircleLayout"> 

</RelativeLayout> 

<Button 
    android:id="@+id/button1" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Add Circle" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:onClick="botonRojo"/> 

</RelativeLayout> 

コード例:これは、あなたが探しているものを使い始める必要があります

public class MainActivity extends AppCompatActivity { 

ArrayList<PonCirculo> viewList = new ArrayList<PonCirculo>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void botonRojo(View v) { 
    RelativeLayout panelJuego = (RelativeLayout) findViewById(R.id.relativeCircleLayout); 
    PonCirculo circulo = new PonCirculo(this, 30, 30, "#FF0000"); 
    circulo.setId(View.generateViewId()); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100); 

    if(!viewList.isEmpty()) { 
     int id = viewList.get(viewList.size()-1).getId(); 
     params.addRule(RelativeLayout.BELOW, id); 
    } 
    panelJuego.addView(circulo, params); 
    viewList.add(circulo); 
} 


public class PonCirculo extends View { 
    private int radio = 30; 
    private String color; 
    int Cx, Cy; 

    public PonCirculo(Context context, int x, int y, String color) { 
     super(context); 
     Cx = Cx + x; 
     Cy = Cy + y; 
     this.color = color; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setColor(Color.parseColor(color)); 
     canvas.drawCircle(Cx, Cy, radio, paint); 
    } 
} 
} 
+0

それは完全に正しく機能しません。最初にボタンを押すと、赤い円が表示されます。ボタンを2回押すと、最初の赤い円が少し右に移動し、2番目の赤い円がその下に表示されます。3回目のボタンを押します。右、それぞれが他のものの下にあり、4回目にはボタンを押して消えます。 – GGG

+0

それは私のために正しいようにそれは奇妙です。 –

+0

http://imgur.com/y4LenIw –