2016-12-19 4 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);         
}                    

На самом деле каждый раз, когда я нажимаю на кнопку красного заполненным круг появляется в андроида экрана но когда я снова нажимаю кнопку, появляется новый круг, и исчезает фомер. Может кто-нибудь мне помочь? Благодарю.

+0

что такое fomer? –

+0

Извините, это была ошибка, я имел в виду «бывший», бывший круг. – GGG

ответ

0

Я предполагаю, что вы просто пытаетесь добавить каждый круг друг под другом при нажатии кнопки.

В настоящее время вы добавляете новое представление каждый раз сейчас, но оно перекладывает предыдущий вид. Вам нужно добавить представления, дающие каждому новому кругу уникальный идентификатор. Затем поместите новый круг под или любую позицию, которую вы выберете. Я даю вам примерный код, который я изменил, чтобы использовать относительный макет, и я помещаю каждый круг под предыдущий. Это должно вам начать с того, что вы ищете:

Пример макета:

<?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

Это не работает полностью. В первый раз я нажимаю кнопку, появляется красный круг, второй раз, когда я нажимаю кнопку, первый красный круг немного сдвигается справа, а под ним появляется второй красный круг, третий раз я нажимаю кнопку три четверти красных круга, которые слегка смещаются в сторону справа, каждый ниже другого, и в четвертый раз я нажимаю кнопку, и все они исчезают. – GGG

+0

Это странно, как кажется правильным для меня. –

+0

http://imgur.com/y4LenIw –

Смежные вопросы