在android中画一个圆圈

时间:2013-03-08 17:18:52

标签: android

我已经学习了一个星期的机器人。我正在写一个简单的程序画一个圆圈。但是当我运行它时它告诉我程序已经停止了。我一次又一次地阅读代码,但找不到错误。能帮帮我吗。

package org.example.viewwithlines;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
public class MainActivity extends Activity {


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

    static public class GraphicsView extends View 
    {
        Paint p;
        public GraphicsView(Context context) {
        super(context);
        p=new Paint();
        p.setColor(Color.MAGENTA);
        }
        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawCircle(30, 40, 10, p);   
        }
        }
}

这是xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <org.example.viewwithlines.MainActivity.GraphicsView
    android:id="@+id/graphics" android:layout_width="fill_parent" android:layout_height="fill_parent"/>

</LinearLayout>

3 个答案:

答案 0 :(得分:1)

很难说它无法正常工作的确切原因。我至少看到两个原因。

  1. 布局中的类名是错误的。由于GraphicsView是嵌套类,因此它应为org.example.viewwithlines.MainActivity$GraphicsView

    <view
        class="org.example.viewwithlines.MainActivity$GraphicsView"
        android:id="@+id/graphics" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"/>
    
  2. 您必须提供一个以ContextAttributeSet作为参数的构造函数

    public GraphicsView(Context context, AttributeSet attrs) {
        super(context, attrs);
        p=new Paint();
        p.setColor(Color.MAGENTA);
    }
    

答案 1 :(得分:1)

你想做什么?

对于背景和一般用途,您只需创建一个可绘制资源并将其设置为方形视图即可:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <solid android:color="#FF0000"/>
</shape>

答案 2 :(得分:0)

扩展视图时,需要向其添加不同的构造函数,以使其在不同的环境中工作。在xml中使用View时,它使用包含AttributeSet的构造函数。

尝试添加一个如下所示:

    public GraphicsView(Context context, AttributeSet attribs) {
        super(context, attribs);
        p=new Paint();
        p.setColor(Color.MAGENTA);
    }

有关更详细的说明,请参阅this post

此外,您正在尝试引用xml中的内部类。执行此操作时,您必须使用$而不是.。这个问题是$是xml标记名称中的非法字符,所以你必须做这样的事情:

<view class="org.example.viewwithlines.MainActivity$GraphicsView" 
    ...
    attribs here
    ... />