在Android屏幕的上半部分使用画布绘制圆圈

时间:2012-07-19 06:08:57

标签: 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中创建的示例。我需要在上半部分使用画布绘制一个圆圈。下半部分对我很好。 enter image description here

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

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


}

下面是主要类,我试图将上面创建的画布添加到主类中。

    @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);
}

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

1 个答案:

答案 0 :(得分:1)

更改您的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);