Я пытаюсь сделать заливку цвета в большом круге, используя перетаскивание, когда я перетаскиваю цвет, можно и помещаю его в большой круг, тогда это правильно, а когда падает в маленький круг, то это неправильно ипоказать 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);
}}