2013-03-08 128 views
0

我一直在学习android一个星期。我正在写一个绘制圆的简单程序。但是当我运行它时,它告诉我程序已经停止。我一遍又一遍地读取代码,但无法找到错误。你能帮我么。在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> 
+1

请加上logcat的输出,显示异常 – ianhanniballake 2013-03-08 17:19:46

+0

它编译,但是当我运行它在模拟器上告诉我应用程序已停止 – Marusia 2013-03-08 17:23:14

+0

当您在模拟器上运行该程序时,应该有一个日志显示该异常。这个日志被称为logcat。你能找到这个日志,并粘贴它在程序崩溃时显示的内容。 – Brianjs 2013-03-08 17:24:37

回答

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> 
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 
    ... /> 
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. 你必须提供一个constuctor这需要ContextAttributeSet作为参数

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