2011-08-18 94 views
2

我正在使用Eclipse制作Android 2.2应用程序。我的应用程序应通过单击按钮绘制 图像。在Android中重绘画布

我在屏幕底部有两个按钮,我需要在具有按钮的同一屏幕上绘制形状。我用FrameLayout绘制形状。

我的问题是,这两个形状是覆盖,所以我需要重画画布。

我的代码

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> 

以上是我的代码。形状被覆盖,所以我想删除并重绘画布或重绘而不覆盖。

+0

难以解决您的问题,而无需看到一些代码。添加你的班级代码。 – Ronnie

回答

0

致电canvas.save()然后做绘图,然后致电canvas.restore()。还取决于你正在绘制的位图。位图应具有透明背景。

编辑:
在绘制位图之前调用canvas.drawColor(Color.White); //Or which ever bg color

编辑:
drawview 试试这个

canvas.drawRect(getLeft(), getTop(), getright() , getBottom() ,paint); 


同样在CircleView

canvas.drawCircle(getLeft()+getwidth()/2, getTop()+getheight()/2, 100, paint); 

最后一个尝试。集儿童重力..

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

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

我使用了这些代码。但仍然是覆盖。请告诉我如何删除画布 – user877854

+0

感谢您的回复。我使用了这些代码。但仍然是覆盖。你能告诉我如何删除画布。我有两个扩展视图以绘制圆形和方形的类以及一个活动类,通过单击按钮和main.xml文件来显示图形。请帮助我删除画布,否则重画不覆盖。 – user877854

+0

谢谢。它的工作原理,但无法得到我所需要的。形状绘制在新屏幕中。 – user877854

3

尝试调用无效()对你的看法。

+0

感谢您的回复。我试过这个。但仍然是覆盖的形状。我有两个扩展视图的类。 DrawView.java绘制Square和CircleView.java以绘制Circle。通过点击按钮显示形状r,但方形覆盖圆形。你能帮我取下画布吗? – user877854