加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使按钮移动触摸我们触摸的确切位置

发布时间:2020-12-15 02:16:37 所属栏目:Java 来源:网络整理
导读:我创建了一个应用程序,其中有一个按钮在触摸它时移动. 现在对于onTouch,我实现了一个不同的类.有两个类,一个是主要的CircleMActivity.java,另一个是onTouch. 现在应用程序运行正常,但有一个问题.当我点击按钮并移动它时它正在移动,但按钮和屏幕触摸之间有一
我创建了一个应用程序,其中有一个按钮在触摸它时移动.

enter image description here

现在对于onTouch,我实现了一个不同的类.有两个类,一个是主要的CircleMActivity.java,另一个是onTouch.
现在应用程序运行正常,但有一个问题.当我点击按钮并移动它时它正在移动,但按钮和屏幕触摸之间有一个间隙.

我想要的是将它移动到我触摸它的位置,而不是稍后移动或者你可以认为我想要在光标位置完全移动它.
我应该如何实现它?

码:

CircleMActivity.java:

public class CircleMActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_circle_m);
        Button b=(Button)findViewById(R.id.btn1);
        MultiTouch mtb=new MultiTouch(this);
        b.setOnTouchListener(mtb);
    }
}

MultiTouch.java:

public class MultiTouch implements OnTouchListener{
    float mPrevX,mPrevY;
    CircleMActivity cm;
    public MultiTouch(CircleMActivity circleMActivity) {
    // TODO Auto-generated constructor stub
        cm=circleMActivity;
}
    @Override
    public boolean onTouch(View arg0,MotionEvent arg1) {
        // TODO Auto-generated method stub
        float currentX,currentY;
        int action=arg1.getAction();
        switch(action){
        case MotionEvent.ACTION_DOWN:
              mPrevX = arg1.getX();
                mPrevY = arg1.getY();
                break;

         case MotionEvent.ACTION_MOVE:

             currentX =  arg1.getRawX();
             currentY =  arg1.getRawY();

                    MarginLayoutParams marginParams = new MarginLayoutParams( arg0.getLayoutParams());   
                    marginParams.setMargins((int)(   currentX  - mPrevX),(int)( currentY - mPrevY),0);
                    LayoutParams layoutParams = new LinearLayout.LayoutParams(marginParams);
                    arg0.setLayoutParams(layoutParams); 

                break;
         case MotionEvent.ACTION_CANCEL:
                break;

            case MotionEvent.ACTION_UP:

                break;   
        }
        return true;
    }
}

activity_circle.xml:

<LinearLayout

android:layout_height="match_parent"
    android:layout_width="match_parent"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:background="#000000"
     android:weightSum="100">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="4.95"
        android:background="#fff"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="X coord"
            android:textColor="#ff00ee"
            android:inputType="number" >
            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/editText2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Y coord"
            android:textColor="#ff00ee"
            android:inputType="number" />

        <EditText
            android:id="@+id/editText3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Radius"
            android:textColor="#ff00ee"
            android:inputType="number" />

        <EditText
            android:id="@+id/editText4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:textColor="#ff00ee"
            android:hint="Colour"
            android:inputType="number" />

    </LinearLayout>

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="4.95"
        android:background="@drawable/custom" />

"


</LinearLayout>

那我该怎么做呢?

解决方法

这是一个简单的坐标数学.在你的

case MotionEvent.ACTION_DOWN:
              mPrevX = arg1.getX();
                mPrevY = arg1.getY();
                break;

使

mPrevY = arg1.getY()+250;

好吧它将走出儿童线性布局,但它看起来不错!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读