java - 在 Android 屏幕的上半部分使用 Canvas 绘制一个圆

标签 java android android-canvas

这是 main.xml 文件,它将屏幕分成两半。在下半部分,它有纬度和经度标签,对应每个标签,它有文本框,将在文本框中显示当前的纬度和经度值。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="@android:color/black" > 

    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_weight="1" 
        android:orientation="vertical" > 

        <!-- currently empty --> 

    </LinearLayout> 

    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_weight="1" 
        android:orientation="vertical" > 

        <LinearLayout 
            android:layout_width="match_parent" 
            android:layout_height="match_parent" 
            android:layout_weight="1" 
            android:orientation="horizontal" > 

            <!-- Latitude Label --> 

            <TextView 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:layout_weight="1" 
                android:text="Latitude" 
                android:textColor="#FFFFFF" /> 

            <EditText 
                android:id = "@+id/lat1"
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content" 
                android:layout_marginBottom="20dip" 
                android:layout_marginTop="5dip" 
                android:layout_weight="0.35" 
                android:singleLine="true" 
                android:textColor="#FFFFFF"
                /> 
        </LinearLayout> 

        <LinearLayout 
            android:layout_width="match_parent" 
            android:layout_height="match_parent" 
            android:layout_weight="1" 
            android:orientation="horizontal" > 

            <!-- Longitude Label --> 

            <TextView 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:layout_weight="1" 
                android:text="Longitude" 
                android:textColor="#FFFFFF" /> 

            <EditText 
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content" 
                android:layout_marginTop="5dip" 
                android:layout_weight="0.35" 
                android:singleLine="true" 
                android:textColor="#FFFFFF"
                android:id = "@+id/lat2" /> 
        </LinearLayout> 
    </LinearLayout> 

</LinearLayout> 

但我的问题是 - 如何在上半部分画一个圆圈。下面是我在 paint 中创建的示例。我需要在上半部分使用 Canvas 绘制一个圆圈。下半部分对我来说很好。 enter image description here

我创建了另一个用于在 Canvas 上绘制圆圈的类文件-

public class DrawCanvasCircle extends View{
    public DrawCanvasCircle(Context mContext) {
        super(mContext);
    }
    protected void onDraw(Canvas canvas) { 
        super.onDraw(canvas); 
        Paint p = new Paint(); 
        p.setColor(Color.WHITE); 
        DashPathEffect dashPath = new DashPathEffect(new float[]{5,5}, (float)1.0); 

        p.setPathEffect(dashPath); 
        p.setStyle(Style.STROKE); 


        for (int i = 0; i < 7; i ++) { 
            canvas.drawCircle(100, 100, 50+(i*10), p); 
        } 


        invalidate(); 
    } 


}

下面是主类,我试图在主类中添加上面创建的 Canvas 。

    @Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ll = (LinearLayout) findViewById(R.id.lc);
        DrawCanvasCircle pcc = new DrawCanvasCircle (this);
        Bitmap result = Bitmap.createBitmap(25, 25, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(result);
        pcc.draw(canvas);
        pcc.setLayoutParams(new LayoutParams(1000, 1000));
        ll.addView(pcc);
}

但它没有得到正确显示。我做错了什么。

最佳答案

改变你的 customView 类

public class DrawCanvasCircle extends View
{
    Context context;

    public DrawCanvasCircle(Context mContext)
    {
        super(mContext);
        context = mContext;
    }

    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(0xFF0000);
        paint.setAlpha(255);
        paint.setStrokeWidth(2.0f);
        paint.setStyle(Paint.Style.STROKE);
        WindowManager mWinMgr = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
        int displayWidth = mWinMgr.getDefaultDisplay().getWidth();
        int displayHeight = mWinMgr.getDefaultDisplay().getHeight();
        int circleRadius = 100;
        canvas.drawCircle(displayWidth/2, displayHeight/4, circleRadius, paint);
        invalidate();
    }

}

并将以下代码行写入您的onCreate方法

LinearLayout ll = (LinearLayout) findViewById(R.id.lc);
DrawCanvasCircle pcc = new DrawCanvasCircle (this);
ll.addView(pcc);

关于java - 在 Android 屏幕的上半部分使用 Canvas 绘制一个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554866/

相关文章:

java - 为什么 try catch OOME 时会有不同的行为?

android - 我如何更改 BadgeDrawable Android 中的背景颜色

Android TabHost 布局问题

java - Android Firestore 将限制为每个用户 1 票

java正则表达式模式未闭合字符类

java - 为什么每当我在父类 - Android 中触发一个操作时,我的子类方法总是被调用?

Java——使用扫描仪读取十六进制数

java - Android 在另一个弧内绘制一个弧

android - 在android中旋转90度

Android:是否可以创建这种类型的圈子?