android - 允许用户通过 onTouch 控制 View 的高度和宽度

标签 android view resize layoutparams ontouch

我正在尝试实现一个用户可调整大小的编辑 TextView 。当用户拖动 View 的边缘时,它可以调整大小。

这是我的 edittext 的 onTouchListener。我只实现了左边缘的大小调整。我的想法是,当用户的触摸事件 x 等于 View 的左边距(这意味着用户正在触摸左边)时, View 的宽度和左边距将发生变化。

  protected View.OnTouchListener etTouchListener=new View.OnTouchListener() {
           @Override
           public boolean onTouch(View view, MotionEvent event) {
               float x=event.getX();
               float y=event.getY();
               ViewGroup.MarginLayoutParams params=(ViewGroup.MarginLayoutParams)view.getLayoutParams();
               int top=params.topMargin;
               int bottom=params.bottomMargin;
               int left=params.leftMargin;
               int right=params.rightMargin;
               if(x==left){
                   switch (event.getAction()){
                       case MotionEvent.ACTION_DOWN:
                           resize_start(x,y);
                           Log.e("left edge","clicked");
                           break;
                       case MotionEvent.ACTION_MOVE:
                           resize_move(x,y);
                           params.leftMargin=(int)nX;
                           params.width=(int)(editNoteViewParent.getWidth()-nX-params.rightMargin);
                           view.setLayoutParams(params);
                           Log.e("left edge","dragged");
                           break;
                       case MotionEvent.ACTION_UP:
                           break;
                   }
               }  

这是我的 resizeStart():

private void resize_start(float x,float y){
        nX = x;
        nY = y;
    }

还有我的 resizeMove():(当用户拖动边缘时)

private void resize_move(float x, float y){
        float dx = Math.abs(x - nX);
        float dy = Math.abs(y - nY);
        if(dx >=TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE){
          nX = x;
          nY = y;
        }
    }

请帮帮我!非常欢迎在用户触摸时调整布局参数大小的相关教程的建议!非常感谢!!

编辑: 我的编辑 TextView 是以编程方式创建的。

  private void addEditText(float x,float y){
        RelativeLayout.LayoutParams editTextParams= new RelativeLayout.LayoutParams(200, 200);
        editTextParams.leftMargin=(int)x-(editTextParams.width/2);
        editTextParams.topMargin=(int)y-(editTextParams.height/2);

        mEditText=new EditText(this);
        mEditText.setHint("Enter note");
        mEditText.setBackgroundResource(R.drawable.edittext_shape);
        editNoteViewParent.addView(mEditText, editTextParams);
        mEditText.setOnTouchListener(etTouchListener);
        editNoteViewParent.setOnDragListener(etDragListener);
        editTextCreated=true;
    }

最佳答案

更新:

好吧,我忘了看你的句柄了。用户很难触摸到 View 的边缘。让我们试试吧:

布局:

<EditText
        android:id="@+id/ed_myEdittext"
        android:layout_width="150dp"
        android:layout_height="50dp" />

和代码:

EditText ed_myEdittext = (EditText) findViewById(R.id.ed_myEdittext);
ed_myEdittext.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int x=(int)event.getX();
        int y=(int)event.getY();
        int width= v.getLayoutParams().width;
        int height = v.getLayoutParams().height;


        if((x - width <= 20 && x - width > 0) ||(width - x <= 20 && width - x > 0)){
            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    break;
                case MotionEvent.ACTION_MOVE:
                    Log.e(">>","width:"+width+" height:"+height+" x:"+x+" y:"+y);
                    v.getLayoutParams().width = x;
                    v.getLayoutParams().height = y;
                    v.requestLayout();
                    break;
                case MotionEvent.ACTION_UP:
                    break;
            }
        }
        return false;
     }
 });

关于android - 允许用户通过 onTouch 控制 View 的高度和宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29575436/

相关文章:

android - 在 Android 上跟随动画

jquery - 仅在较小的屏幕上切换导航

Java Swing JFrame 最小化/最大化调整大小错误

java - android如何生成R

java - 如何从android中的一个Arraylist中获取单独的数据项值

android - 将xml中相邻 View 的id传递给自定义 View 并在自定义 View 的构造函数中检索它

java - jpa2 hibernate使用现有实体从 View 加载数据

android - view - 寻找类似 on(View)Destroyed 的事件

java - 如何平滑地根据容器大小自动调整多个 JLabel 的字体大小?

android - 如何使用 ActivityInstrumentationTestCase2 捕获异常?