簡體   English   中英

android imageView里面的可移動textview

[英]moveable textview inside imageView android

我正在嘗試在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嗎? 您可以擴展TextView,重新定義公共布爾onTouch(View v,MotionEvent事件),在其中計算offsetX和offsetY,添加接口,例如OnPositionChangeListener(int offsetX,int offsetY),並讓活動包含此RelativeLayout實現此接口。 對我有用。

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