2013-02-27 54 views
0

我試圖拖動和可調整大小的textview裏面的圖像在Android上。我可以拖動TextView的觸摸,但拖動超出屏幕。可以幫助我拖動圖像內的文本視圖。代碼在這裏可移動textview裏面imageView android

public void drag(MotionEvent event, View v){ 

    RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams(); 

    switch(event.getAction()) 
    { 
     case MotionEvent.ACTION_MOVE: 
     { 
      Log.v("touch","move"); 
     params.topMargin = (int)event.getRawY() - (textView.getHeight()); 
     params.leftMargin = (int)event.getRawX() - (textView.getWidth()/2); 
     int y= (int)event.getRawY(); 
     int x=(int)event.getRawX(); 

     DisplayMetrics dm = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dm); 
     if(params.topMargin>=0 && params.leftMargin>=0 ) 
      textView.setLayoutParams(params); 
     break; 
     } 
     case MotionEvent.ACTION_UP: 
     { 
      Log.v("touch","up"); 

     params.topMargin = (int)event.getRawY() - (textView.getHeight()); 
     params.leftMargin = (int)event.getRawX() - (textView.getWidth()/2); 

     Log.v("touch", "params.topMargin"+params.topMargin); 
     Log.v("touch", " params.leftMargin"+ params.leftMargin); 

     if((params.topMargin>=0) && (params.leftMargin>=0)) 

       textView.setLayoutParams(params); 

     // textView.setLayoutParams(params); 
     break; 
     } 
     case MotionEvent.ACTION_DOWN: 
     { 
      textView.setLayoutParams(params); 
     break; 
     } 
    } 
} 

回答

0

你真的需要拖動移動TextView嗎?您可以擴展TextView,重新定義public boolean onTouch(View v,MotionEvent事件),計算其中的offsetX和offsetY,添加接口,例如OnPositionChangeListener(int offsetX,int offsetY),並讓活動包含此RelativeLayout實現此接口。這對我很有用。

0
private void initDragView() { 
     // text view drag 
     _root = (ViewGroup) findViewById(R.id.tblDragView); 

     _root.addView(txtContent); 
     _root.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getActionMasked()) { 
       case MotionEvent.ACTION_MOVE: 
        int x = (int) event.getX() - _xDelta; 
        int y = (int) event.getY() - _yDelta; 
        int w = backgroundImageWidth;// getWindowManager().getDefaultDisplay().getWidth(); 
        int h = backgroundImageHeight;// getWindowManager().getDefaultDisplay().getHeight(); 
        if (x < 0 || y < 0 || x > w || y > h) 
         return false; 

        if (x > w) { 

         x = w; 
         return true; 
        } 
        if (y > h) { 
         // Log.d("TAG", "Ouch i am out side height"); 
         y = h; 
         return true; 
        } 

        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
          new ViewGroup.MarginLayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT)); 
        if (lp.leftMargin < x && lp.topMargin < y) 
         lp.setMargins(x, y, 0, 0); 
        // txtContent.setBackgroundColor(getResources().getColor(
        // R.color.blue)); 
        txtContent.setLayoutParams(lp); 

        break; 
       default: 
        break; 
       } 
       return true; 
      } 
     }); 

     txtContent.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getActionMasked()) { 
       case MotionEvent.ACTION_DOWN: 
        _xDelta = (int) event.getX(); 
        _yDelta = (int) event.getY(); 

        txtContent = (TextView) v; 
        break; 
       default: 
        break; 
       } 
       return false; 
      } 
     }); 

    }