2014-10-02 2 views
0

각 버튼을 클릭 한 후 원을 추가하려고하는데 같은 화면이 표시됩니다. 아직 다른 버튼 코드를 구현하지는 않았지만 화면을 지우겠다고했습니다. 원은 임의의 위치/크기/색상으로되어 있습니다. 버튼을 클릭하면 첫 번째 서클 만 인쇄됩니다. 다시 클릭하면 앱이 종료됩니다. 아직 임의의 위치/크기를 추가하지는 않았지만 각 버튼을 클릭하여 화면에 다른 원을 표시하는 방법을 모르겠습니다. 내 코드는 아래와 같습니다.각 버튼을 클릭 한 후 원을 추가하는 방법은 android를 클릭 하시겠습니까?

package com.example.randomcircles; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.FrameLayout; 

public class DisplayRandomCircles extends Activity 
{ 
DrawCircle c; 
Canvas d; 
FrameLayout f1; 
@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); 
    c = new DrawCircle(getApplicationContext()); 
    d = new Canvas(); 
    f1 = (FrameLayout) findViewById(R.id.frame); 

} 
@SuppressLint("WrongCall") 
public void doit(View v) 
{ 
    switch (v.getId()) 
    { 
     case (R.id.btn1): 
      f1.addView(c); 
      break; 

     case (R.id.btn2): 
      break; 
    } 
} 
} 

내 그리기 원 코드

import java.util.Random; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

public class DrawCircle extends View 
{ 
public DrawCircle(Context con) 
{ 
    super(con); 
} 
@Override 
protected void onDraw(Canvas c) 
{ 
    int min = 0, max = 200; 
    int num = min + (int)(Math.random()*max); 
    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.RED); 
    p.setStyle(Paint.Style.FILL); 
    c.drawCircle(num, num, num, p); 
    invalidate(); 
} 
} 

내 레이아웃 XML

<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

랜덤을 사용하여 위치를 가져오고'addCircle' 메서드를 만듭니다 – jyoon

+0

** 원 ** 원을 그리시겠습니까? 아니면 버튼을 누르면 ** 원 ** 원을 추가 하시겠습니까? –

+0

서클 버튼을 클릭 할 때마다 새 서클을 추가하고 싶습니다. – user3242607

답변

0

이 일을 여러 가지 방법이 있지만, 나는이 일을 두 가지 방법을 보여주고 싶습니다

가장 간단한 방법 :

아래 그림과 같이에서 onCreate에서 초기화 및 작은 동전()을 수정하려면 속성을 "C"와 코드를 제거 활동에 DrawCircle 요소의 목록/배열을 사용하여

case (R.id.btn1): 
    DrawCircle c = new DrawCircle(getApplicationContext()); 
    circleList.add(c); 
    f1.addView(c); 
    break; 

내가 권하고 싶습니다 방법을 대부분의 :

  1. 두 배열을 유지/DrawCircle의 목록 (또는 당신은 단순히 하나의 해시 맵을 사용할 수 있습니다) : 직경/반경의 목록이 포함 된 원 센터
  2. 다른 목록을 포함
    • 하나.
  3. onDraw()에서 이러한 목록을 반복하고 이에 따라 원을 그리는 코드를 추가하십시오.
  4. 그리고 버튼 클릭 코드를 수정하여 DrawCircle에서 addCircle()과 같은 메소드를 호출하거나 (이 두 목록을 공개하고 직접 추가하여)이 두 목록에 임의의 값을 추가하십시오.

희망이 도움이됩니다.

관련 문제