2013-06-28 6 views
0

Я использую Android Studio для создания небольшого приложения перетаскивания. Я соблюдал все правила, которые я знаю, и у кода, похоже, нет никаких ошибок, однако, когда я запускаю его на своем устройстве, он просто сбой. Кто-нибудь знает, где его неправильно?Помощь при перетаскивании - Android

Код прекрасно, пока 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); 
} 

} 
} 
+0

Было бы полезно, если бы вы могли разместить LogCat. – MaxAlexander

ответ

1

Проблема заключается в линии

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

Эта строка сообщает Объект blueballdrag, чтобы найти дочерний вид под названием imageView4. Я предполагаю, что у вашего ImageViews нет детей. Вы хотите использовать метод findViewById() своей деятельности, а не ваш вид.

Изменение проблемы на следующей должно решить вашу проблему.

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

ahh это сработало thx! – jtmwanakhu