2017-05-19 4 views
0

は、今私は、チュートリアルを使用するが、これをachiveきたエッジ上のImageButtonをドラッグしようとしている:どのようにエッジ上の任意のビューをドラッグするには?

はエッジにドラッグしたい

その私の出力どこでも、そのドラッグ

これは私のコードです:

imageButton.setOnTouchListener(new View.OnTouchListener() { 
     PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down 
     PointF StartPT = new PointF(); // Record Start Position of 'img' 

     @Override 
     public boolean onTouch(View v, MotionEvent event) 
     { 
      int eid = event.getAction(); 
      switch (eid) 
      { 
       case MotionEvent.ACTION_MOVE : 
        PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y); 
        imageButton.setX((int)(StartPT.x+mv.x)); 
        imageButton.setY((int)(StartPT.y+mv.y)); 
        StartPT = new PointF(imageButton.getX(), imageButton.getY()); 
        break; 
       case MotionEvent.ACTION_DOWN : 
        DownPT.x = event.getX(); 
        DownPT.y = event.getY(); 
        StartPT = new PointF(imageButton.getX(), imageButton.getY()); 
        break; 
       case MotionEvent.ACTION_UP : 
        // Nothing have to do 
        break; 
       default : 
        break; 
      } 
      return true; 
     } 
    }); 

答えて

0

私はあなたの問題を見て、最後に答えを得るため、私はこのようにそれを達成 ...取り組んできました:そのそれから出て行くそうでない場合は、画面上のごIMAGEBUTTONを立ち往生ため まずセットDisplayMetrics:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
    final int height = displayMetrics.heightPixels-106; 

とエッジのみでのドラッグ用のイメージビューTouchlistnerに:

mMapView.setOnTouchListener(new View.OnTouchListener(){ 
     PointF DownPT = new PointF(); 
     PointF StartPT = new PointF(); 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int eid = event.getAction(); 
      switch (eid) 
      { 
       case MotionEvent.ACTION_MOVE : 
        PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y); 
        if((int)(StartPT.y+mv.y)<=0){ 
         mMapView.setY(0); 
         StartPT = new PointF(mMapView.getX(), mMapView.getY()); 
        }else if((int)(StartPT.y+mv.y)>=height){ 
         mMapView.setY(height); 
         StartPT = new PointF(mMapView.getX(), mMapView.getY()); 
        } 
        else { 
         mMapView.setY((int) (StartPT.y + mv.y)); 
         StartPT = new PointF(mMapView.getX(), mMapView.getY()); 
        } 
        break; 
       case MotionEvent.ACTION_DOWN : 
        DownPT.y = event.getY(); 
        StartPT = new PointF(0, mMapView.getY()); 
        break; 
       case MotionEvent.ACTION_UP : 
        DownPT.y = event.getY(); 
        StartPT = new PointF(0, mMapView.getY()); 
        break; 
       default : 
        break; 
      } 
      return true; 
     } 
    }); 

また、フロートxを記録するためのこの方法及びYが、最初のインポートをフロートこの:

import android.graphics.PointF; 

public class PointF 
{ 
    public float x = 0; 
    public float y = 0; 
    public PointF(){}; 
    public PointF(float _x, float _y){ x = _x; y = _y; } 
} 
関連する問題