In this example we will see how to drag and ImageView in android on touch drag event.

Creating View layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_vertical_margin" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="124dp"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

Activity Java code

-Advertisement-

package com.javatechig;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements View.OnTouchListener {

	private ImageView mImageView;
	private ViewGroup mRrootLayout;
	private int _xDelta;
	private int _yDelta;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mRrootLayout = (ViewGroup) findViewById(R.id.root);
		mImageView = (ImageView) mRrootLayout.findViewById(R.id.imageView);

		RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 150);
		mImageView.setLayoutParams(layoutParams);
		mImageView.setOnTouchListener(this);
	}

	public boolean onTouch(View view, MotionEvent event) {
		final int X = (int) event.getRawX();
		final int Y = (int) event.getRawY();
		switch (event.getAction() & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_DOWN:
			RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
			_xDelta = X - lParams.leftMargin;
			_yDelta = Y - lParams.topMargin;
			break;
		case MotionEvent.ACTION_UP:
			break;
		case MotionEvent.ACTION_POINTER_DOWN:
			break;
		case MotionEvent.ACTION_POINTER_UP:
			break;
		case MotionEvent.ACTION_MOVE:
			RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
					.getLayoutParams();
			layoutParams.leftMargin = X - _xDelta;
			layoutParams.topMargin = Y - _yDelta;
			layoutParams.rightMargin = -250;
			layoutParams.bottomMargin = -250;
			view.setLayoutParams(layoutParams);
			break;
		}
		mRrootLayout.invalidate();
		return true;
	}
}

Output

Drag a View in Android

Tagged in : Android UI

Join The Discussion

Please note: We reserve the right to delete comments that contains snarky remarks, offensive or off-topic. To know more read our comments policy.
  • Dhiraj Kumar

    Hi Sir,
    Nice Script.

    I want to put image at the bottom line.
    I have used this code

    But still its not working. It displays at top left of screen.

    Plz help

    Thanks

  • hmd

    how can i apply smooth scrolling effect (parallax effect after dragging)

  • TechnoRazor

    What does “mRrootLayout.invalidate();” do?

  • Gregory

    Thanks a lot! I have been searching all day and now I found it! AWESOME

  • You have to make yourself when the view is dragged. Handle ACTION_MOVE event and find if your view reached the position (x, y). Where x, y represents your screen bound.

  • Lalit Sharma

    How to can I check if my view is dragged?

  • amit

    thankm you

  • amit

    very nice tutorial….thank you

  • Nilanchala Panigrahy

    Change your layout to the following. The image will appear in center

  • $id

    Nice code, Worked for me. Thanks a lot :)

  • Gaurang Kachhadiya

    Hey,
    how to move image fixed location on every time???

    plz helpppp….

  • Gaurang Kachhadiya

    you want to must be set or change to id of parent-layout or main-layout…

  • Mario

    you should write instead of ViewGroup, Button/ImageView… depending on the type of View you want to drag