package com.example.multipleanimations;

import android.graphics.Rect;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Random;

public class MainActivity extends AppCompatActivity {
    private ImageView img1, img2, img3, img4, img5, img6, bird;
    private boolean mIsScrolling = false;
    private Rect outRect = new Rect();
    private int[] location = new int[2];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Animation animFadeOut = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_out);

        img1 = findViewById(R.id.img1);
        img2 = findViewById(R.id.img2);
        img3 = findViewById(R.id.img3);
        img4 = findViewById(R.id.img4);
        img5 = findViewById(R.id.img5);
        img6 = findViewById(R.id.img6);
        bird = findViewById(R.id.bird);

        img1.startAnimation(animFadeOut);
        img2.startAnimation(animFadeOut);
        img3.startAnimation(animFadeOut);
        img4.startAnimation(animFadeOut);
        img5.startAnimation(animFadeOut);
        img6.startAnimation(animFadeOut);

        bird.setBackgroundResource(R.drawable.fly_bird);
        AnimationDrawable flybird = (AnimationDrawable) bird.getBackground();
        flybird.start();

        RotateAnimation rotate = new RotateAnimation(0, 360,
                Animation.RELATIVE_TO_SELF, 0.5f,
                Animation.RELATIVE_TO_SELF, 0.5f
        );
        rotate.setDuration(1000); // 1 second
        rotate.setRepeatCount(Animation.INFINITE); // Continuous rotation

        img1.setOnTouchListener(new MoveViewTouchListener(img1));
        img2.setOnTouchListener(new MoveViewTouchListener(img2));
        img3.setOnTouchListener(new MoveViewTouchListener(img3));
        img4.setOnTouchListener(new MoveViewTouchListener(img4));
        img5.setOnTouchListener(new MoveViewTouchListener(img5));
        img6.setOnTouchListener(new MoveViewTouchListener(img6));
    }

public class MoveViewTouchListener implements View.OnTouchListener {
    private GestureDetector mGestureDetector;
    private View mView;

    public MoveViewTouchListener(View view) {
        mGestureDetector = new GestureDetector(view.getContext(), mGestureListener);
        mView = view;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            mIsScrolling = false;
        }
        if (mGestureDetector.onTouchEvent(event)) {
            return true;
        }
        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (mIsScrolling) {
                mIsScrolling = false;
            }
        }
        return false;
    }

    private GestureDetector.OnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener() {
        private float mMotionDownX, mMotionDownY;

        @Override
        public boolean onDown(MotionEvent e) {
            mMotionDownX = e.getRawX() - mView.getTranslationX();
            mMotionDownY = e.getRawY() - mView.getTranslationY();
            return true;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            mIsScrolling = true;
            mView.setTranslationX(e2.getRawX() - mMotionDownX);
            mView.setTranslationY(e2.getRawY() - mMotionDownY);
            return true;
        }
    };
}

private boolean isViewInBounds(View view, int x, int y) {
    view.getDrawingRect(outRect);
    view.getLocationOnScreen(location);
    outRect.offset(location[0], location[1]);
    return outRect.contains(x, y); }
}
