Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:在屏幕上画圆圈_Android_Android View_Draw_Android Bitmap - Fatal编程技术网

Android:在屏幕上画圆圈

Android:在屏幕上画圆圈,android,android-view,draw,android-bitmap,Android,Android View,Draw,Android Bitmap,我在屏幕上画圆圈有困难。我不知道我是否正确处理了这个问题,或者是否必须使用位图。下面是我创建的一个Circle类,专门根据我的规范创建一个Circle package com.example.alex.parkinsonsdiseaseapp; import android.view.View; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; publ

我在屏幕上画圆圈有困难。我不知道我是否正确处理了这个问题,或者是否必须使用位图。下面是我创建的一个Circle类,专门根据我的规范创建一个Circle

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();

    }
}

您应该在CircleView中设置LayoutParams

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

如果只需要一个圆,请使用xml drawable。把答案填进去

在xml可绘制之后,在布局中创建一个imageView,并将其作为android:src

这样,您就不必担心LayoutParam等问题。您可以在imageView中定义它,并将它们相应地放置在布局中您喜欢的位置

更新

嗨,Alex,根据你的需要,我有一个完整的代码,可以在视图上生成随机圆圈

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;
        }
    }
}
公共类视图{
公众内部高度;
语境;
私人油漆;
私有静态最终整数最大值=200;
private List dataList=new ArrayList();
公共随机循环(上下文c、属性集属性){
super(c,attrs);
上下文=c;
mPaint=新油漆();
mPaint.setAntiAlias(true);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(油漆、样式、笔划);
mPaint.setStrokeJoin(油漆.连接.圆形);
mPaint.设定行程宽度(4f);
}
@凌驾
已更改尺寸的受保护空心(整数w、整数h、整数oldw、整数oldh){
super.onSizeChanged(w,h,oldw,oldh);

对于(int i=0;我不想用xml画圆圈为什么要画这么多代码???你没有指定
圆圈的宽度和高度是的@Rod_Algonquin是对的,你没有指定
圆圈
视图的尺寸,所以它们可能是零,导致根本没有画任何东西。框架布局涵盖了整个活动。你如何指定圆视图尺寸?@Sandeep我需要编写代码,因为我最终会使其在屏幕上生成随机圆,只需先尝试绘制一个。是否需要删除框架布局?如果框架布局(在活动中\u手指\u敲击)是视图的根。没有问题。如果看不到任何效果,请尝试使用LinearLayout。我在查找LayoutParams的导入语句时遇到问题。Android studio提出了更改该语句的其他建议。import FrameLayout.LayoutParams()我只是想显示一个圆圈,让我的应用程序运行起来。我需要能够在屏幕上的任意位置生成圆圈。嗨,亚历克斯,添加一些代码,也许这会满足你的需要。你能解释一下你在做什么吗,比如使用onSizeChanged的意义吗?onSizeChanged是为了在活动中满足你的需要改变方向(如纵向和横向)…在初始化时,有时大小会随着活动的开始而改变。例如,由于大小可能是匹配的\u parent等…这在开始时没有定义。同样在Android N开始时,多窗口平台允许用户更改大小等。因此,每当大小改变并重置时,计算宽度和高度更安全。
<com.YOU_PACKAGE_NAME.RandomCircles
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>