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

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

This article is about: Android UI,

Madhumita

She is self-motivated enthusiastic techie spending most of her time in writing code. She loves coding, android and java. She has developed her software personality with understanding on various tools and technologies and hands on experience on app development.

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