Problem with Button. I want to hold down on an image and drag it to an specific location, which should open an activity

78 Views Asked by At

Honestly I dont know how to proceed. I looked up some feeds on this website and got a bit confused. The imageview button should be invisibly dragged at the specific location of an other image and as long as my pressed thumb relocates to the other image, a activity should be called. In an earlier version, the activity was functional but not while moving the button while it is hold down with my thumb. Hopefully someone knows an answer for this (for me very challenging question.

@Override
    public boolean onTouchEvent(MotionEvent event) {

        if (imageRect == null) {
            imageRect = new Rect();
            imageView2.getGlobalVisibleRect(imageRect);
        }
        int x = (int) event.getX();
        int y = (int) event.getY();
        if (imageRect.contains(x, y)) {
            openActivity();
        }

        return super.onTouchEvent(event);
    }


 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        detectorCompat = new GestureDetectorCompat(this, new GestureListener());
        imageViewPlayButton = findViewById(R.id.PlayButton_Image_White_Base);
        imageView2 = findViewById(R.id.register_Icon_Base);
        imageView3 = findViewById(R.id.navigation_Background_Image_Register);
        imageView4 = findViewById(R.id.Login_Icon_Base);

        imageViewPlayButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    imageView2.setVisibility(View.VISIBLE);
                    imageView3.setVisibility(View.VISIBLE);
                    imageView4.setVisibility(View.VISIBLE);
                } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    imageView2.setVisibility(View.INVISIBLE);
                    imageView3.setVisibility(View.INVISIBLE);
                    imageView4.setVisibility(View.INVISIBLE);
                }
                return true;
            }
        });

    }
1

There are 1 best solutions below

0
AudioBubble On
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GestureDetectorCompat;

import android.annotation.SuppressLint;
import android.app.RemoteInput;
import android.content.Intent;
import android.graphics.Rect;
import android.media.effect.Effect;
import android.os.Bundle;
import android.os.Handler;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private ImageView imageViewPlayButton, imageView2, imageView3, imageView4;
    private Rect imageRect;

    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        detectorCompat = new GestureDetectorCompat(this, new GestureListener());
        imageViewPlayButton = findViewById(R.id.PlayButton_Image_White_Base);
        imageView2 = findViewById(R.id.register_Icon_Base);
        imageView3 = findViewById(R.id.navigation_Background_Image_Register);
        imageView4 = findViewById(R.id.Login_Icon_Base);

        imageViewPlayButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    imageView2.setVisibility(View.VISIBLE);
                    imageView3.setVisibility(View.VISIBLE);
                    imageView4.setVisibility(View.VISIBLE);
                } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    imageView2.setVisibility(View.INVISIBLE);
                    imageView3.setVisibility(View.INVISIBLE);
                    imageView4.setVisibility(View.INVISIBLE);
                }
                return false;
            }
        });

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        if (imageRect == null) {
            imageRect = new Rect();
            imageView2.getGlobalVisibleRect(imageRect);
        }
        int x = (int) event.getX();
        int y = (int) event.getY();
        if (imageRect.contains(x, y)) {
            openActivity();
        }

        return true;
    }

    private void openActivity() {
        Intent intent = new Intent(this, Register.class);
        startActivity(intent);
        overridePendingTransition(0, 0);
    }

}