0

私は Android Studio を使用して小さなドラッグ アンド ドロップ アプリケーションを作成しています。私は知っているすべてのルールに従っており、コードにエラーはないようですが、デバイスで実行すると単純にクラッシュします。誰がどこが間違っているか知っていますか?

initialise();が呼び出されるまで、コードは問題ありませんpublic void blue(View v)

だから私はエラーがそこにあると疑っています

public class MainActivity extends Activity {
private ImageView blueball;
private ImageView blueballdrag;

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


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void colourGen(View view){
    int i =1;
    if (i==i){
        blue(view);
    }
}

public void brown(View v){
    setContentView(R.layout.activity_brown);
}
public void yellow (View v){
    setContentView(R.layout.activity_yellow);
}
public void green (View v){
    setContentView(R.layout.activity_green);
}
public void blue (View v){
    setContentView(R.layout.activity_blue);
    initialise();
}



@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void initialise() {
    final ImageView imageView = (ImageView) blueballdrag.findViewById(R.id.imageView4);
    imageView.setOnDragListener(new View.OnDragListener() {
        public boolean onDrag(View v, DragEvent dragEvent) {
            switch (dragEvent.getAction()) {
                case DragEvent.ACTION_DRAG_STARTED:
                    v.setBackgroundColor(Color.RED);
                case DragEvent.ACTION_DRAG_ENTERED:
                   v.setBackgroundColor(Color.BLACK);
                case DragEvent.ACTION_DRAG_ENDED:
                    v.setBackgroundColor(Color.GREEN);
                case DragEvent.ACTION_DROP:
                    v.setBackgroundColor(Color.WHITE);
            }
            return false;
        }
    });
    blueball = (ImageView) findViewById(R.id.imageView6);
    blueball.setOnLongClickListener(new OnLongClickListener(){
        @Override
        public boolean onLongClick(View v) {
            View.DragShadowBuilder myShadow = new MyDragShadowBuilder(blueball);
            v.startDrag(null, myShadow, null, 0);
            return false;
        }
    });
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private static class MyDragShadowBuilder extends View.DragShadowBuilder {
    private static Drawable shadow;
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)

    public MyDragShadowBuilder(View v) {
        super(v);
        shadow = new ColorDrawable(Color.RED);
}
    public void onProvideShadowMetrics(Point size, Point touch){
        int width, height;
        width = getView().getWidth() * 2;
        height = getView().getHeight() * 2;
        shadow.setBounds(0, 0, width, height);
        size.set(width, height);
        touch.set(width*2, height*2);
}
    public void onDrawShadow(Canvas canvas){
        shadow.draw(canvas);
}

}
}
4

1 に答える 1

1

問題はライン

final ImageView imageView = (ImageView) blueballdrag.findViewById(R.id.imageView4);

この行は、オブジェクトblueballdragに という子ビューを見つけるように指示しますimageView4。あなたの ImageViews には子供がいないと思います。findViewById()ビューではなく、アクティビティのメソッドが必要です。

行を次のように変更すると、問題が解決するはずです。

final ImageView imageView = (ImageView) findViewById(R.id.imageView4);
于 2013-06-28T18:24:39.223 に答える