0

私は1週間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>
4

3 に答える 3

1

それが機能しない正確な理由を言うのは難しいです。少なくとも2つの理由があります。

  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. 引数としてとるコンストラクターを提供する必要がContextありますAttributeSet

    public GraphicsView(Context context, AttributeSet attrs) {
        super(context, attrs);
        p=new Paint();
        p.setColor(Color.MAGENTA);
    }
    
于 2013-03-08T17:28:10.490 に答える
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>
于 2013-03-08T19:05:37.487 に答える
0

ビューを拡張するときは、さまざまな状況で機能させるために、さまざまなコンストラクターを追加する必要があります。xmlでビューを使用する場合、インクルードされたコンストラクターを使用しますAttributeSet

次のようなものを追加してみてください。

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

詳細な説明については、この投稿も参照してください。

また、xmlで内部クラスを参照しようとしています。その場合、の$代わりにを使用する必要があります.。これに伴う問題は$、xmlタグ名に不正な文字があることです。そのため、代わりに次のようなことを行う必要があります。

<view class="org.example.viewwithlines.MainActivity$GraphicsView" 
    ...
    attribs here
    ... />
于 2013-03-08T17:24:57.667 に答える