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.
InformationsquelleAutor user877854 | 2011-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen invalidate() aufgerufen, die auf Ihre anzeigen.
InformationsquelleAutor Lior Ohana
Call
canvas.save()
dann tun, zeichnen dann rufen Siecanvas.restore()
. Hängt auch von der bitmaps u zeichnen. Die bitmaps sollten einen transparenten hintergrund haben.Bearbeiten:
Rufen Sie
canvas.drawColor(Color.White); //Or which ever bg color
vor dem zeichnen der bitmap.Bearbeiten:
In
drawview
versuchen Sie, diese
Ähnlich wie in
CircleView
Einen letzten Versuch. Set Kinder die Schwerkraft..
Vielen Dank für Ihre Antwort. Ich verwendete diesen code. Aber noch ist es zu überschreiben. kann u bitte mir sagen, wie zu entfernen die Leinwand. Ich habe zwei Klassen, die erweitert Ansicht zu zeichnen, Kreis und Quadrat-und einer activity-Klasse zur Anzeige der Zeichnung, indem Sie die Tasten und ein main.xml Datei. Bitte helfen Sie mir, entfernen Sie die Leinwand sonst zu zeichnen, ohne es zu überschreiben.
Danke. Es funktioniert, aber nicht genau das bekommen, was ich brauche. Die Form ist gezeichnet, die im neuen Bildschirm.
Sorry. Auch jetzt habe ich nicht bekommen, was ich will. Wie Ihr code, der Kreis wird gezeichnet und in der canvas-Platz gezogen. Ich brauche zwei Leinwand in einem einzigen Bildschirm, ohne es zu überschreiben. kann u bitte helfen Sie mir
Ich bearbeitet meine Antwort. Nun atleast Sie sollten sich nicht gegenseitig überschreiben.
InformationsquelleAutor Ronnie