调整气泡销毁的拖放区大小

8
我正在复制一个类似于Facebook聊天气泡的实现,并成功创建了气泡可被放置的下拉容器。我想要实现的功能是,在删除区域(即带有十字标记的圆形图像)中应该能够放置气泡。当我将气泡拖到圆形图像内部时,希望能够调整圆形图像的大小并使其变大。因此,当我将气泡放在放大的图像内部时,它应该消失。但是当我将气泡悬停在图像上方时,无法调整图像的大小。删除功能已经实现。
我希望得到关于动态调整圆形放置区域图像大小(根据悬停或不悬停而扩大或收缩)的指针。
欢迎提供任何指针,谢谢。下面是用于理解的图片。

enter image description here

enter image description here


你能否发布相关的代码和XML文件? - Evgeniy Mishustin
你从https://dev59.com/g2Qo5IYBdhLWcg3wivwi中没有理解到什么吗? - James
你们是否有任何回调系统来知道气泡是否放置在删除区域内? - Dinash
@Dinash:嗨。是的,我知道泡泡何时进入删除区域。我只是想在泡泡进入后调整删除区域的大小。 - D'yer Mak'er
2个回答

0

只需修改可在此处找到的拖放示例,即可获得您想要的行为。希望这可以帮助到您。

public class MyNewActivity extends Activity {
ImageView img;
String msg;
private android.widget.RelativeLayout.LayoutParams layoutParams;
private View target;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_drag_drop);
    img=(ImageView)findViewById(R.id.imageView);
    target=findViewById(R.id.target);

    img.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            ClipData.Item item = new ClipData.Item((CharSequence)v.getTag());
            String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};

            ClipData dragData = new ClipData(v.getTag().toString(),mimeTypes, item);
            View.DragShadowBuilder myShadow = new View.DragShadowBuilder(img);

            v.startDrag(dragData,myShadow,null,0);
            return true;
        }
    });

    img.setOnDragListener(onDragListener1);
    target.setOnDragListener(onDragListener1);

    img.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                ClipData data = ClipData.newPlainText("", "");
                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(img);

                img.startDrag(data, shadowBuilder, img, 0);
                img.setVisibility(View.INVISIBLE);
                return true;
            }
            else
            {
                return false;
            }
        }
    });
}

private boolean isViewScalled=false;

View.OnDragListener onDragListener1=new View.OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
        switch(event.getAction())
        {
            case DragEvent.ACTION_DRAG_STARTED:
                Log.d(msg, "Action is DragEvent.ACTION_DRAG_STARTED");

                // Do nothing
                break;

            case DragEvent.ACTION_DRAG_ENTERED:
                Log.d(msg, "Action is DragEvent.ACTION_DRAG_ENTERED");
                if(!isViewScalled) {
                    target.animate().scaleXBy(.5f).scaleYBy(.5f).start();
                    isViewScalled=true;
                }
                break;

            case DragEvent.ACTION_DRAG_EXITED :
                Log.d(msg, "Action is DragEvent.ACTION_DRAG_EXITED");
                if(isViewScalled) {
                    target.animate().scaleXBy(-.5f).scaleYBy(-.5f).start();
                    isViewScalled=false;
                }
                break;

            case DragEvent.ACTION_DRAG_LOCATION  :
                Log.d(msg, "Action is DragEvent.ACTION_DRAG_LOCATION");
                break;

            case DragEvent.ACTION_DRAG_ENDED   :
                Log.d(msg, "Action is DragEvent.ACTION_DRAG_ENDED");

                // Do something
                break;

            case DragEvent.ACTION_DROP:
                Log.d(msg, "ACTION_DROP event");
                break;
            default: break;
        }
        return true;
    }
};

}

布局

<?xml version="1.0" encoding="utf-8"?>

<ImageView
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:id="@+id/imageView" android:scaleType="fitXY"
    android:src="@drawable/abc_btn_radio_material" />


<ImageView
    android:layout_width="125dp"
    android:layout_height="125dp"  android:scaleType="fitXY"
    android:id="@+id/target" android:layout_centerHorizontal="true"
    android:src="@drawable/abc_btn_radio_material" android:layout_alignParentBottom="true" />


-1

你能检测到鼠标悬停事件吗?
请试一下这个。

onHover

versionNameTextView.setScaleX(1f);
versionNameTextView.setScaleY(1f);
circlerImageView.animate().scaleX(1.5f).scaleY(1.5f).setDuration(500).start();

onHoverEnd

versionNameTextView.setScaleX(1.5f);
versionNameTextView.setScaleY(1.5f);
circlerImageView.animate().scaleX(1f).scaleY(1f).setDuration(500).start();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接