Neuzeichnen des canvas in Android

Ich mache ein Android-2.2-Anwendung mit Eclipse. Meine Anwendung ziehen sollte
Bilder durch klicken auf Schaltflächen.

Habe ich zwei Schaltflächen am unteren Rand des der Bildschirm, und ich brauche, um die Form zu zeichnen, die in dem gleichen Bildschirm, der die Tasten. Ich verwendet FrameLayout in denen die Formen gezeichnet werden.

Mein problem ist, die beiden Formen sind zu überschreiben, so muss ich Neuzeichnen des canvas.

Mein Code

package draw.tab;

import android.app.Activity;
//import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;

public class DrawActivity extends Activity implements OnClickListener
{
    DrawView drawview;
    CircleView circleView;
    FrameLayout Frame;
    Button square,circle;

    /** Called when the activity is first created. */

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

        Frame=(FrameLayout)findViewById(R.id.MyFrame);      
        drawview=new DrawView(this);
        circleView=new CircleView(this);

        square=(Button)findViewById(R.id.buttonTest);
        square.setOnClickListener(this);
        circle=(Button)findViewById(R.id.circleButton);
        circle.setOnClickListener(this);
    }

    public void onClick(View v)
    {
        switch (v.getId()) {
            case R.id.circleButton:
                Frame.addView(circleView);
                /*circleView.setBackgroundColor(Color.rgb(40,100,20));
                circleView.findViewById(R.id.CircleViewId);
                setContentView(circleView);*/
                break;
            case R.id.buttonTest:
                Frame.addView(drawview);
                /*drawview.setBackgroundColor(Color.WHITE);
                drawview.findViewById(R.id.DrawViewId);
                drawview.layout(400,0,200,450);
                setContentView(drawview);*/
                break;
        }
    }
}

DrawView.java

package draw.tab; 

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

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

    public DrawView(Context context) 
    {
        super(context);
        paint.setColor(Color.RED);
        paint.setStyle(Style.STROKE);
        //context.clearRect(70,140,400,450);
        //pat.addRect(50,40,250,400,Path.Direction.CW);
    }

    public DrawView(Context con,AttributeSet atts)
    {
        super(con,atts);
    }

    @Override
    public void onDraw(Canvas canvas) 
    {       
        //canvas.drawPath(pat,paint);
        canvas.drawLine(20,40,450,40,paint);//horizontal top            
        canvas.drawRect(70,140,400,450,paint);
        canvas.drawLine(20,40,20,600,paint);//vertical left
        canvas.drawLine(20,600,450,600,paint);//horizontal bottom
        canvas.drawLine(450,40,450,600,paint);//vertical right
        //this.invalidate();
    }
}

CircleView.java

package draw.tab;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class CircleView extends View
{
    Paint p=new Paint();
    Path path=new Path();

    public CircleView(Context context)
    {
        super(context);
        p.setColor(Color.BLUE);
        p.setStyle(Style.STROKE);
        //path.addCircle(250,250,50,Path.Direction.CW);
    }

    public CircleView(Context con,AttributeSet atts)
    {
        super(con,atts);
    }

    public void onDraw(Canvas c)
    {
        //c.drawPath(path,p);
        //c.save();
        c.drawLine(20,40,450,40, p);//horizontal top
        c.drawCircle(250,350,100,p);
        c.drawLine(20,40,20,600,p);//vertical left
        c.drawLine(20,600,450,600,p);//horizontal bottom
        c.drawLine(450,40,450,600,p);//vertical right
        //c.restore();
        this.invalidate();
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:visibility="visible"
    android:id="@+id/MyFrame"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <draw.tab.DrawView
    android:id="@+id/DrawViewId"
    android:layout_width="320dp"
    android:layout_height="600dp">
    </draw.tab.DrawView>

    <draw.tab.CircleView
    android:id="@+id/CircleViewId"
    android:layout_width="320dp"
    android:layout_height="600dp">
    </draw.tab.CircleView>

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:gravity="bottom">

     <Button 
        android:layout_height="wrap_content" 
        android:text="Circle" 
        android:id="@+id/circleButton" 
        android:layout_width="160dp">
    </Button>

    <Button 
        android:layout_height="wrap_content" 
        android:text="Square" 
        android:id="@+id/buttonTest" 
        android:layout_width="160dp">
    </Button>
</LinearLayout>

</FrameLayout>

Den oben genannten ist, dass alle meine Codes. Die Formen sind zu überschreiben, möchte ich das entfernen und Neuzeichnen des canvas-Bereichs oder neu gezeichnet, ohne es zu überschreiben.

Schwierig, um Ihr problem zu lösen ohne zu sehen, einen code. Fügen Sie Ihre Klasse code.

InformationsquelleAutor user877854 | 2011-08-18

Schreibe einen Kommentar