Android: Drag và Drop đến vị trí bất kỳ

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

File activity_main.xml:

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/view_root"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="#26ce61">

  <ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginTop="188dp"
    android:src="@drawable/ic_launcher_background"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="123dp"
    android:layout_marginStart="123dp"
    android:layout_alignParentLeft="true"/>

</RelativeLayout>

File MainActivity.java:

package v1study.com.draganddropv1study;

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

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

  private ImageView img;
  private ViewGroup rootLayout;
  private int _xDelta;
  private int _yDelta;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rootLayout = findViewById(R.id.view_root);
    img = rootLayout.findViewById(R.id.imageView);

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 150);
    img.setLayoutParams(layoutParams);
    img.setOnTouchListener(new ChoiceTouchListener());
  }

  private final class ChoiceTouchListener implements OnTouchListener {
    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;
      }
      rootLayout.invalidate();
      return true;
    }
  }
}
» Tiếp: Cảm ứng đa điểm (MultiTouch)
« Trước: Chạy ứng dụng trên thiết bị phần cứng
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!