imageView android中的可移动文本视图

imageView android中的可移动文本视图,android,draggable,textview,Android,Draggable,Textview,我正在尝试在android上拖动和调整大小的textview内部图像。我可以在触摸TextView时拖动,但它会拖到屏幕之外。你能帮我在图像中拖动TextView吗。代码在这里 public void drag(MotionEvent event, View v){ RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams(); s

我正在尝试在android上拖动和调整大小的textview内部图像。我可以在触摸TextView时拖动,但它会拖到屏幕之外。你能帮我在图像中拖动TextView吗。代码在这里

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

移动文本视图确实需要拖动吗?您可以扩展TextView,重新定义公共布尔onTouch(View v,MotionEvent事件),计算其中的offsetX和offsetY,添加接口,例如OnPositionChangeListener(int offsetX,int offsetY),并让活动包含此RelativeLayout实现此接口。这对我很有用。

私有void initDragView(){
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;
            }
        });

    }
//文本视图拖动 _root=(视图组)findViewById(R.id.tblDragView); _root.addView(txtContent); _root.setOnTouchListener(新视图.OnTouchListener(){ @凌驾 公共布尔onTouch(视图v,运动事件){ 开关(event.getActionMasked()){ case MotionEvent.ACTION\u移动: int x=(int)event.getX(); int y=(int)event.getY()-\u yDelta; int w=backgroundImageWidth;//getWindowManager().getDefaultDisplay().getWidth(); int h=backgroundImageHeight;//getWindowManager().getDefaultDisplay().getHeight(); if(x<0 | | y<0 | | x>w | | y>h) 返回false; 如果(x>w){ x=w; 返回true; } 如果(y>h){ //Log.d(“标签”,“哎哟,我在外侧高度”); y=h; 返回true; } RelativeLayout.LayoutParams lp=新的RelativeLayout.LayoutParams( 新建ViewGroup.MarginLayoutParams( RelativeLayout.LayoutParams.WRAP_内容, RelativeLayout.LayoutParams.WRAP_内容); if(lp.leftMargin