Cambiar el color del rectángulo con un botón

Estoy tratando de hacer una aplicación simple que muestre un rectángulo y tenga la capacidad de cambiar su color con un botón.

La clase de rectángulo es:

public class DrawView extends View{
Paint paint = new Paint();


public DrawView(Context context) {
    super(context);
}
public DrawView(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public DrawView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
public void onDraw(Canvas canvas) {

    paint.setColor(Color.YELLOW);
    canvas.drawRect(300, 550, 150, 400, paint );

}

public void setColorRed()
{
   paint.setColor(Color.RED);
   invalidate();
}

Mi aplicación es la aplicación Tab Layout. Esta clase se muestra en la tercera pestaña de esta manera:

principal.xml

<TabHost
    android:id="@+id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </TabWidget>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <LinearLayout
                android:id="@+id/tab1"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >

            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"  >

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

    <Button
    android:id="@+id/bRedColor"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Red" />


   <com.thms.systemy3.DrawView
        android:id="@+id/yourID"
        android:layout_margin="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </com.thms.systemy3.DrawView>
                </FrameLayout>


            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
</TabHost>

Estaba tratando de obtener acceso a setColorRed () desde mi clase MainClass.java por

DrawView drawview;

Y luego usar

drawview.setColorRed()

claseprincipal.java:

public class MainClass extends Activity implements OnClickListener{

TabHost th;
DrawView drawview;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    th = (TabHost) findViewById(R.id.tabhost);



    //tab3
    Button bColorRed = (Button) findViewById(R.id.bRedColor);

    th.setup();

    TabSpec specs = th.newTabSpec("tag1");
    specs.setContent(R.id.tab1);
    specs.setIndicator("TAB1");
    th.addTab(specs);

    specs = th.newTabSpec("tag2");
    specs.setContent(R.id.tab2);
    specs.setIndicator("TAB2");
    th.addTab(specs);

    specs = th.newTabSpec("tag3");
    specs.setContent(R.id.tab3);
    specs.setIndicator("TAB3");
    th.addTab(specs);


}



@Override
public void onClick(View v) {
    switch (v.getId()){
    case R.id.bRedColor:
        drawview.setColorRed();
        break;
    }

¿Qué estoy haciendo mal? ¿Alguien podría corregir este código o darme un ejemplo adecuado de cómo configurar una aplicación simple que dibuje un rectángulo y pueda cambiar de color con un botón?

Gracias por tu respuesta.

preguntado el 03 de mayo de 12 a las 15:05

1 Respuestas

intente usar esto:

paint.setStyle(Paint.Style.FILL);

contestado el 03 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.