简体   繁体   English

android imageView里面的可移动textview

[英]moveable textview inside imageView android

I m trying to draggable and resizeable textview inside image on android. 我正在尝试在Android上的图像内拖动和调整大小的textview。 im able to draggable on touch of TextView but its dragging beyond the screen.Could you help me drag textview within the image. 我无法在触摸TextView时将其拖动,但是将其拖动到屏幕之外。能否帮助我在图像内拖动textview。 code is here 代码在这里

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

Do you really need drag for move TextView? 您真的需要拖动来移动TextView吗? You may extend TextView, redefine public boolean onTouch(View v, MotionEvent event), calculate offsetX and offsetY in it, add interface, for example, OnPositionChangeListener(int offsetX, int offsetY) and lets activity contains this RelativeLayout implements this interface. 您可以扩展TextView,重新定义公共布尔onTouch(View v,MotionEvent事件),在其中计算offsetX和offsetY,添加接口,例如OnPositionChangeListener(int offsetX,int offsetY),并让活动包含此RelativeLayout实现此接口。 It's works for me. 对我有用。

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

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM