Как залить цвет с помощью перетаскивания в Android - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь сделать заливку цвета в большом круге, используя перетаскивание, когда я перетаскиваю цвет, можно и помещаю его в большой круг, тогда это правильно, а когда падает в маленький круг, то это неправильно ипоказать GIF WRT это.Но моя проблема в том, что он падает только в большой круг или маленький круг или в оба одновременно.Я не использую алгоритм заливки, просто использую для замены изображения после перетаскивания. Пожалуйста, помогите мне.Ниже мой код.

MainActivity.java

 public class MainActivity extends AppCompatActivity implements View.OnDragListener, View.OnTouchListener {

private ImageView bigCircleImage, redColorImage, smallCircleImage;
private ImageView gifImage;
private final String IMAGE_RED_TAG = "Red Color";

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

    initViews();
    initListeners();
}

private void initViews() {

    bigCircleImage = (ImageView) findViewById(R.id.big_circle_img);
    redColorImage = (ImageView) findViewById(R.id.red_color_image);
    smallCircleImage = (ImageView) findViewById(R.id.small_circle_img);
    gifImage = (ImageView) findViewById(R.id.image_gif);
    redColorImage.setTag(IMAGE_RED_TAG);
}

private void initListeners() {
    bigCircleImage.setOnDragListener(this);
    smallCircleImage.setOnDragListener(this);
    redColorImage.setOnTouchListener(this);
}


@Override
public boolean onDrag(View v, DragEvent event) {
    Log.d("TAG", "onDrag");

    final int action = event.getAction();

    switch (action) {

        case DragEvent.ACTION_DRAG_STARTED:

            if (v == bigCircleImage && v == smallCircleImage)
                ((ImageView) v).setColorFilter(Color.TRANSPARENT);

            v.invalidate();

            return true;

        case DragEvent.ACTION_DRAG_ENTERED:
            if (v == bigCircleImage && v == smallCircleImage)
                ((ImageView) v).setColorFilter(Color.TRANSPARENT);

            v.invalidate();

            return true;

        case DragEvent.ACTION_DRAG_LOCATION:

            return true;

        case DragEvent.ACTION_DRAG_EXITED:
            if (v == bigCircleImage && v == smallCircleImage)
                ((ImageView) v).setColorFilter(Color.TRANSPARENT);

            v.invalidate();

            return true;

        case DragEvent.ACTION_DROP:

            // Gets the item containing the dragged data
            ClipData dragData = event.getClipData();

            // Turns off any color tints
            ((ImageView) v).clearColorFilter();

            v.invalidate();

            return true;

        case DragEvent.ACTION_DRAG_ENDED:

            // Turns off any color tinting
            ((ImageView) v).clearColorFilter();

            v.invalidate();

            // Check for result
            if (event.getResult()) {
                gotoCelebrateGif();

            } else {
                gotoWrongGif();
            }

            return true;

        default:
            break;
    }

    return false;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    String tag = v.getTag().toString();

    View.DragShadowBuilder mShadow;

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            ClipData data = ClipData.newPlainText("some label", tag);

            if (v == bigCircleImage) {
                bigCircleImage.setImageResource(R.drawable.red_solid_circle);
                mShadow = new View.DragShadowBuilder(redColorImage);
            } else{
                smallCircleImage.setImageResource(R.drawable.red_solid_circle);
                mShadow = new View.DragShadowBuilder(redColorImage);
            }

            v.startDrag(data, mShadow, null, 0);

            break;

        case MotionEvent.ACTION_UP:
            v.performClick();

            break;

        default:
            break;
    }
    return false;
}

private void gotoCelebrateGif() {
    gifImage.setVisibility(View.VISIBLE);
    Glide.with(MainActivity.this).asGif().load(R.drawable.celebration_gif).into(gifImage);
}

private void gotoWrongGif() {
    gifImage.setVisibility(View.VISIBLE);
    Glide.with(MainActivity.this).asGif().load(R.drawable.wrong_gif).into(gifImage);
}}
...