2016-04-01 79 views
0

我無法在屏幕上繪製圓圈。我不知道我是否正確接近,或者如果我必須使用位圖。以下是我創建的Circle類,專門爲我的規範創建一個圓。Android:屏幕上的繪圖圈

package com.example.alex.parkinsonsdiseaseapp; 

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

public class Circle extends View { 
    private final float x; 
    private final float y; 
    private final int r; 
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 

    public Circle(Context context, float x, float y, int r) { 
     super(context); 
     mPaint.setColor(0x000000); 
     this.x = x; 
     this.y = y; 
     this.r = r; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawCircle(x, y, r, mPaint); 
    } 
} 

下面是使用上述類的活動。

package com.example.alex.parkinsonsdiseaseapp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.Toast; 
import android.widget.LinearLayout.LayoutParams; 

public class FingerTappingActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_finger_tapping); 

     LinearLayout circle = (LinearLayout) findViewById(R.id.lt); 
     View circleView = new Circle(this, 100, 100, 100); 
     circleView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     circle.addView(circleView); 
     Toast.makeText(FingerTappingActivity.this, "Test", Toast.LENGTH_SHORT).show(); 

    } 
} 
+1

whay不是xml來繪製圓爲什麼這麼多代碼? –

+1

你沒有指定'Circle'的寬度和高度 –

+0

是的@Rod_Algonquin是對的,你沒有指定'Circle' Views維度,所以它們可以是零,因此根本就不會畫任何東西。 –

回答

0

你應該設置的LayoutParams在CircleView

View circleView = new Circle(this, 50, 50, 100) 
circleView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
circle.addView(circleView); 
+0

我是否需要移除FrameLayout? –

+0

如果FrameLayout(在activity_finger_tapping中)是您視圖的根目錄,則沒有問題。如果看不到任何效果,請嘗試使用LinearLayout –

+0

我無法找到LayoutParams的導入語句。 Android工作室提出了其他改變該聲明的建議。 –

0

使用所需的XML繪製,而是如果只是一個圓圈。檢查How to define a circle shape in an android xml drawable file?中的答案。

具有XML繪製後,在佈局創建一個ImageView的,幷包括爲你的Android:SRC

有了這個,你就不必擔心LayoutParam等您可以在您的ImageView的定義,並將它們相應放置在您的佈局中您喜歡的位置。

修訂

亞歷你好,根據自己的需要,我有一個生成的視圖隨機界的一個完整的代碼。

public class RandomCircles extends View { 

    public int height; 
    Context context; 
    private Paint mPaint; 

    private static final int MAX_SIZE = 200; 
    private List<Data> dataList = new ArrayList<>(); 

    public RandomCircles(Context c, AttributeSet attrs) { 
     super(c, attrs); 
     context = c; 
     mPaint = new Paint(); 
     mPaint.setAntiAlias(true); 
     mPaint.setColor(Color.BLACK); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeWidth(4f); 

    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     for (int i = 0; i <= 50; i++) { 
      int x = (int)(Math.random() * w); 
      int y = (int)(Math.random() * h); 
      int size = (int)(Math.random() * MAX_SIZE); 
      addCircle(x, y, size); 
     } 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     for (Data data : dataList) { 
      int size = data.size; 
      mPaint.setAlpha(255 - size); 
      canvas.drawCircle(data.x, data.y, data.size, mPaint); 
     } 
    } 

    private void addCircle(float x, float y, int size) { 
     dataList.add(new Data(x, y, size)); 
    } 


    class Data { 
     public float x; 
     public float y; 
     public int size; 

     public Data(float x, float y, int size) { 
      this.x = x; 
      this.y = y; 
      this.size = size; 
     } 
    } 
} 

從它創建一個類,並在佈局中啓動它。

<com.YOU_PACKAGE_NAME.RandomCircles 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

你會得到像下面這樣的東西。雖然不完全一樣,因爲圓是隨機的。根據需要編輯代碼以滿足您的需求。乾杯。

enter image description here

+0

我只是想顯示一個圈子來讓我的應用程序有些功能,我需要能夠在屏幕上的任意位置生成圓圈。 –

+0

HI Alex,添加一些代碼,也許這將符合您的需求。 – Elye

+0

您能解釋更多關於你在做什麼,比如使用onSizeChanged? –