2015-06-18 67 views
0

我創建了一個onTouchEvent來查找用戶觸摸的位置,並將我的對象移動到該位置。我想要做的是如果用戶在屏幕上按下,物體會直線移動一定距離。對於其他方向也是如此。我知道我需要幾條語句來做到這一點,但我不知道該怎麼做。沒有任何人有任何意見或不知道如何做到這一點,得益於Android:如何判斷用戶是否按下,向下,向左或向右?

public boolean onTouchEvent(MotionEvent ev) { 

    if(ev.getAction() == MotionEvent.ACTION_DOWN) { 
     // the new image position became where you touched 
     x = ev.getX(); 
     y = ev.getY(); 


    // if statement to detect where user presses down   
    if(){ 
    } 
     // redraw the image at the new position 
     Draw.this.invalidate(); 
    } 
    return true; 
} 

回答

0

試試這個

public boolean onTouchEvent(MotionEvent ev) { 

    initialise boolean actionDownFlag = false; 

    if(ev.getAction() == MotionEvent.ACTION_DOWN) { 
     // the new image position became where you touched 
     x = (int) ev.getX(); 
     y = (int) ev.getY(); 


    // if statement to detect where user presses down   
    if(actionDownFlag){ 

     catcher.moveDown(); 
    } 
     // redraw the image at the new position 
     Draw.this.invalidate(); 
    } 
    return true; 
} 

    public void moveDown(){ 

     posX -= //WhereEver you want to move the position (-5); 
    } 
0

試試這個:

layout_counter.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent event) 
    { 
     if (currentState != State.EDIT_MOVE) return false; 

     FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams(); 
     if (view.getId() != R.id.layout_counter) return false; 

     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_MOVE: 
       params.topMargin = (int) event.getRawY() - view.getHeight(); 
       params.leftMargin = (int) event.getRawX() - (view.getWidth()/2); 
       view.setLayoutParams(params); 
       break; 

      case MotionEvent.ACTION_UP: 
       params.topMargin = (int) event.getRawY() - view.getHeight(); 
       params.leftMargin = (int) event.getRawX() - (view.getWidth()/2); 
       view.setLayoutParams(params); 
       break; 

      case MotionEvent.ACTION_DOWN: 
       view.setLayoutParams(params); 
       break; 
     } 

     return true; 
    } 
}); 
0

您需要使用OnLongClickListener與阻力和適合更好android的下拉框架:

觀察下面的例子:

public class MainActivity extends Activity { 

    private ImageView myImage; 
    private static final String IMAGEVIEW_TAG = "The Android Logo"; 

/** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     myImage = (ImageView)findViewById(R.id.image); 
     // Sets the tag 
     myImage.setTag(IMAGEVIEW_TAG); 

     // set the listener to the dragging data 
     myImage.setOnLongClickListener(new MyClickListener()); 

     findViewById(R.id.toplinear).setOnDragListener(new MyDragListener()); 
     findViewById(R.id.bottomlinear).setOnDragListener(new MyDragListener()); 

    } 

    private final class MyClickListener implements OnLongClickListener { 

     // called when the item is long-clicked 
     @Override 
     public boolean onLongClick(View view) { 
     // TODO Auto-generated method stub 

      // create it from the object's tag 
      ClipData.Item item = new ClipData.Item((CharSequence)view.getTag()); 

      String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN }; 
      ClipData data = new ClipData(view.getTag().toString(), mimeTypes, item); 
      DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 

      view.startDrag(data, //data to be dragged 
          shadowBuilder, //drag shadow 
          view, //local data about the drag and drop operation 
          0 //no needed flags 
         ); 


      view.setVisibility(View.INVISIBLE); 
      return true; 
     } 
    } 

    class MyDragListener implements OnDragListener { 
     Drawable normalShape = getResources().getDrawable(R.drawable.normal_shape); 
     Drawable targetShape = getResources().getDrawable(R.drawable.target_shape); 

     @Override 
     public boolean onDrag(View v, DragEvent event) { 

      // Handles each of the expected events 
      switch (event.getAction()) { 

      //signal for the start of a drag and drop operation. 
      case DragEvent.ACTION_DRAG_STARTED: 
       // do nothing 
       break; 

      //the drag point has entered the bounding box of the View 
      case DragEvent.ACTION_DRAG_ENTERED: 
       v.setBackground(targetShape); //change the shape of the view 
       break; 

      //the user has moved the drag shadow outside the bounding box of the View 
      case DragEvent.ACTION_DRAG_EXITED: 
       v.setBackground(normalShape); //change the shape of the view back to normal 
       break; 

      //drag shadow has been released,the drag point is within the bounding box of the View 
      case DragEvent.ACTION_DROP: 
       // if the view is the bottomlinear, we accept the drag item 
        if(v == findViewById(R.id.bottomlinear)) { 
         View view = (View) event.getLocalState(); 
         ViewGroup viewgroup = (ViewGroup) view.getParent(); 
         viewgroup.removeView(view); 

         //change the text 
         TextView text = (TextView) v.findViewById(R.id.text); 
         text.setText("The item is dropped"); 

         LinearLayout containView = (LinearLayout) v; 
         containView.addView(view); 
         view.setVisibility(View.VISIBLE); 
        } else { 
         View view = (View) event.getLocalState(); 
         view.setVisibility(View.VISIBLE); 
         Context context = getApplicationContext(); 
         Toast.makeText(context, "You can't drop the image here", 
               Toast.LENGTH_LONG).show(); 
         break; 
        } 
        break; 

      //the drag and drop operation has concluded. 
      case DragEvent.ACTION_DRAG_ENDED: 
       v.setBackground(normalShape); //go back to normal shape 

      default: 
       break; 
      } 
      return true; 
     } 
    } 
} 

here採取上面的代碼演示瞭如何拖放和如何做的同時拖動.. 我使用了類似的東西爲好。

相關問題