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

问题描述 投票:4回答:1

我创建了一个应用程序,其中有一个按钮,触摸它时会移动.enter image description here

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

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

码:

circle M activity.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);
    }
}

multi touch.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, 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>

那我该怎么做呢?

java android ontouchlistener
1个回答
0
投票

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

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

使

mPrevY = arg1.getY()+250;

好吧它会走出孩子linear layout但它看起来不错!

© www.soinside.com 2019 - 2024. All rights reserved.