2014-10-02 3 views
1

내 프로그램에서 내 명확한 버튼을 사용할 수 없습니다. 내 원 버튼은 무작위로 원을 표시하지만 내 명확 버튼은 아무 것도하지 않습니다. 나는 길을 잃었다. 내가 drawColor.Color.TRANSPARENT 또는 mode.clear 사용할 수 있지만 아무것도 작동하는지 알고 있어요.취소 버튼을 만들어 캔버스를 지우십시오. android

package com.example.randomcircles; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.graphics.*; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.*; 
import android.content.*; 

public class DisplayRandomCircles extends Activity 
{ 
FrameLayout f1, f2; 
@Override 
public void onCreate(Bundle b) 
{ 
    super.onCreate(b); 
    setContentView(R.layout.activity_display_random_circles); 
    Button btn1 = (Button) findViewById(R.id.btn1); 
    Button btn2 = (Button) findViewById(R.id.btn2); 
    f1 = (FrameLayout) findViewById(R.id.frame); 


} 
@SuppressLint("WrongCall") 
public void doit(View v) 
{ 
    int rand = (int) (Math.random() * 60); 
    DrawCircle c = new DrawCircle(getApplicationContext()); 
    Canvas d = new Canvas(); 
    Paint p = new Paint(); 
    switch (v.getId()) 
    { 
     case (R.id.btn1): 
      f1.addView(c); 
      break; 

     case (R.id.btn2): 
      d.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
      break; 
    } 
} 
} 

package com.example.randomcircles; 
import java.util.Random; 
import android.annotation.SuppressLint; 
import android.content.Context; 
import android.graphics.*; 
import android.view.*; 

public class DrawCircle extends View 
{ 
Random random = new Random(); 
int red = (int) (Math.random() * 255); 
int green = (int) (Math.random() * 255); 
int blue = (int) (Math.random() * 255); 
int randX = random.nextInt(700); 
int randY = random.nextInt(1000); 
int randR = random.nextInt(200); 
int color = Color.rgb(red, green, blue); 

public DrawCircle(Context con) 
{ 
    super(con); 
} 
@SuppressLint("DrawAllocation") 
@Override 
public void onDraw(Canvas c) 
{ 
    super.onDraw(c); 
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); 
    p.setAntiAlias(true); 
    p.setStyle(Paint.Style.STROKE); 
    p.setStrokeWidth(100); 
    p.setColor(color); 
    p.setStyle(Paint.Style.FILL); 
    c.drawCircle(randX, randY, randR, p); 

} 

} 

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

<FrameLayout 
    android:id="@+id/frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight=".75" 
    android:orientation="vertical" > 


</FrameLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight=".25" 
    android:gravity="bottom|center" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="start|bottom" 
     android:layout_weight=".50" 
     android:onClick="doit" 
     android:text="@string/Circle" /> 

    <Button 
     android:id="@+id/btn2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight=".50" 
     android:layout_gravity="end|bottom" 
     android:onClick="doit" 
     android:text="@string/Clear" /> 
</LinearLayout> 

</LinearLayout> 

답변

0

당신은 DrawCircle의 새로운 인스턴스마다 doIt가 호출을 만들 수 있습니다.

이전 인스턴스가 아직 있습니다. 따라서 f1에서 이전 뷰를 제거하거나 이전에 만든 DrawCircle의 인스턴스를 똑같이 가져와 새 색상을 설정 한 다음 DrawCircle에 invalidate()를 호출하여 강제로 다시 그려야합니다.