2011-08-18 89 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