0

こんにちは、マルチタッチ サポートを使用するアプリケーションを作成したいと考えています。

マルチタッチの場合、このコードを使用しています

これで、コードが以下のようなorg.metalev.multitouch.photosortr.PhotoSortrActivityアクティビティがあることがわかります

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setTitle(R.string.instructions);
    photoSorter = new PhotoSortrView(this);
    setContentView(photoSorter);
}

それはうまくいきます

しかし、これの代わりに、このビューを自分のビューに追加したい場合は、以下のようにコードの上に書きます...

activity_main.xml という名前の XML ファイルを 1 つ作成しました。

<org.metalev.multitouch.photosortr.PhotoSortrView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</org.metalev.multitouch.photosortr.PhotoSortrView>

そしてonCreateメソッドで私は以下のように変更しました

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setTitle(R.string.instructions);
    photoSorter = new PhotoSortrView(this);
    setContentView(R.layout.activity_main);
}

このようにすると、以下のエラーが表示されます

10-30 12:15:29.319: E/AndroidRuntime(6652): java.lang.NullPointerException
10-30 12:15:29.319: E/AndroidRuntime(6652):     at org.metalev.multitouch.photosortr.PhotoSortrView$Img.draw(PhotoSortrView.java:274)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at org.metalev.multitouch.photosortr.PhotoSortrView.onDraw(PhotoSortrView.java:86)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.view.View.draw(View.java:6914)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.view.View.draw(View.java:6917)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-30 12:15:29.319: E/AndroidRuntime(6652):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)

PhotoSortrView.java ファイルでは、コードは以下のようになり、このエラーが発生します

public void draw(Canvas canvas) {
    canvas.save();
    float dx = (maxX + minX) / 2;
    float dy = (maxY + minY) / 2;
    ---->drawable.setBounds((int) minX, (int) minY, (int) maxX, (int) maxY); // HERE getting drawable == NULL
    canvas.translate(dx, dy);
    canvas.rotate(angle * 180.0f / (float) Math.PI);
    canvas.translate(-dx, -dy);
    drawable.draw(canvas);
    canvas.restore();
}
4

2 に答える 2

1

唯一の原因は、システムによって渡され、メソッドの残りの変数がプリミティブであるため、クラスのdrawable使用が null である可能性があります。この変数はof class で初期化され、 of class から呼び出されます。draw()Imgcanvasload()ImgloadImages()PhotoSortrView

さて、アクティビティの から変数をloadImages()呼び出していると思います。しかし、レイアウトを膨張させて作成された別のインスタンスがあります。そのインスタンスも呼び出すようにしてください。photoSorteronResume()PhotoSortrViewloadImages()

于 2012-10-30T07:50:57.327 に答える
0

ウィングマンへの提案私は以下のように解決しました:

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setTitle(R.string.instructions);
    setContentView(R.layout.activity_main);
    photoSorter = (PhotoSortrView)findViewById(R.id.photoSortView);
}

@Override
protected void onResume() {
    super.onResume();
    photoSorter.loadImages(this);
}

また、PhotosorterView.java ファイルのコードは以下のとおりです。

    public PhotoSortrView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

public PhotoSortrView(Context context) {
    super(context);
    init(context);
}

public PhotoSortrView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(context);
}
于 2012-10-30T10:17:51.493 に答える