2013-03-08 122 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); 
    }