2013-06-17 2 views
0

Я пытаюсь сделать довольно простое приложение для Android (с использованием Eclipse и Android 4.0.2, API 15), которое реализует перетаскивание &. У него есть ImageView, который нужно перетаскивать и отбрасывать на другой ImageView. Но у меня, похоже, есть какая-то проблема. Приложение компилируется правильно, но я набираю силу, когда запускаю ее на эмуляторе и на реальном устройстве. Мой код имеет 3 класса: один для (только) деятельности, один для «перетаскиваемом» изображения слушателя и один для «целевого» изображения слушателя:Получение неожиданной ошибки при попытке запустить приложение для Android с помощью перетаскивания

активность:

public class MainActivity extends Activity { 

    ImageView imageToBeDragged = (ImageView)findViewById(R.id.imagetodrag); 
    ImageView targetImage = (ImageView)findViewById(R.id.target); 

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

     imageToBeDragged.setOnTouchListener(new ChoiceTouchListener()); 
     targetImage.setOnDragListener(new ChoiceDragListener()); 
    } 

    @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; 
    } 
} 

Draggable слушатель:

public final class ChoiceTouchListener implements OnTouchListener { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
      ClipData data = ClipData.newPlainText("", ""); 
      DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
      //start dragging the item touched 
      view.startDrag(data, shadowBuilder, view, 0); 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 

Target слушателем:

public class ChoiceDragListener implements OnDragListener { 

    @Override 
    public boolean onDrag(View v, DragEvent event) { 
     switch (event.getAction()) { 
     case DragEvent.ACTION_DRAG_STARTED: 
      //no action necessary 
      break; 
     case DragEvent.ACTION_DRAG_ENTERED: 
      //no action necessary 
      break; 
     case DragEvent.ACTION_DRAG_EXITED: 
      //no action necessary 
      break; 
     case DragEvent.ACTION_DROP: 
      //handle the dragged view being dropped over a target view 
      View view = (View) event.getLocalState(); 
      //stop displaying the view where it was before it was dragged 
      view.setVisibility(View.INVISIBLE); 
      //view dragged item is being dropped on 
      ImageView dropTarget = (ImageView) v; 
      //view being dragged and dropped 
      ImageView dropped = (ImageView) view; 
      //Dim the target image when the other ImageView is dropped on it 
      dropTarget.setAlpha(100); 
      break; 
     case DragEvent.ACTION_DRAG_ENDED: 
      //no action necessary 
      break; 
     default: 
      break; 
     } 
     return true; 
    } 
} 

Что может быть причиной Ошибка?

Спасибо!

+0

Пожалуйста, сообщите об ошибке. –

ответ

1

Съемка в темноте, не видя ошибки, но ваша деятельность выглядела неправильно. Вы не можете найти представление по его идентификатору, пока не установите представление содержимого.

public class MainActivity extends Activity { 

    ImageView imageToBeDragged; 
    ImageView targetImage; 

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

     imageToBeDragged = (ImageView)findViewById(R.id.imagetodrag); 
     targetImage = (ImageView)findViewById(R.id.target); 
     imageToBeDragged.setOnTouchListener(new ChoiceTouchListener()); 
     targetImage.setOnDragListener(new ChoiceDragListener()); 
    } 

    @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; 
    } 
} 
+0

Отлично! Вот так! Наверное, ошибка начинающего. Спасибо! – Floella

Смежные вопросы