4

I have created an application in which there is a button which moves on touching it .enter image description here

Now for onTouch I have implemented A different class.There are 2 classes one is main CircleMActivity.java and another for onTouch. Now the app is running fine but there is one problem. When I am clicking on the button and moving it It is moving but there is a gap between the button and the screen touch.

What I want is to move it exactly where I touch it NOT at some distance later OR you can think that I want to move it at exact the cursor position. How should I achieve it ?

Code:

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, 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>

So how should I achieve it ?

Ramesh Bhati
  • 1,239
  • 16
  • 25
utkarsh dubey
  • 141
  • 2
  • 14

1 Answers1

0

It is a simple coordinates maths . In your

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

Make

mPrevY = arg1.getY()+250;

Well It will go out of the child linear layout but it is looking good !

Zumbarlal Saindane
  • 1,199
  • 11
  • 24
utkarsh dubey
  • 141
  • 2
  • 14