调整放置区域的大小以破坏气泡
Posted
技术标签:
【中文标题】调整放置区域的大小以破坏气泡【英文标题】:Resizing drop zone for bubble destroy 【发布时间】:2016-03-25 04:25:06 【问题描述】:所以我正在复制一个类似的实现,比如带有 facebook 聊天气泡的实现,并成功地创建了要丢弃的气泡的放置容器。我想要实现的功能是我应该能够在删除区域中放置一个气泡(这恰好是一个带有十字标记的圆形图像)。当我在圆形图像中拖动气泡时,我希望调整圆形图像的大小并使其更大。因此,当我将气泡留在放大图像中时,它应该会消失。当我将气泡悬停在它上面时,我无法调整它的大小。删除功能已经到位。
我想要关于圆形拖放区图像动态调整大小的指针(根据悬停或不悬停扩展和收缩)
欢迎任何指点。提前致谢。
以下图片便于理解。
【问题讨论】:
能贴出相关代码和xml吗? 有什么你没有从***.com/questions/15975988/…得到的东西 你有没有回调系统知道气泡是否放在删除区域内? @Dinash:嗨。是的,我知道气泡何时在删除区域中。一旦气泡在里面,我只想调整删除区域的大小 【参考方案1】:只需修改可用的拖放示例here 即可获得您的预期行为。希望这会有所帮助。
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_
android:layout_
android:id="@+id/imageView" android:scaleType="fitXY"
android:src="@drawable/abc_btn_radio_material" />
<ImageView
android:layout_
android:layout_ android:scaleType="fitXY"
android:id="@+id/target" android:layout_centerHorizontal="true"
android:src="@drawable/abc_btn_radio_material" android:layout_alignParentBottom="true" />
【讨论】:
【参考方案2】:你能检测到悬停事件吗? 请试试这个。
悬停
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();
【讨论】:
以上是关于调整放置区域的大小以破坏气泡的主要内容,如果未能解决你的问题,请参考以下文章
如何在不破坏图像纵横比的情况下调整 QImage 或 QML 图像的大小以适应父容器
子节点的 JavaFX GridPane 动态调整大小以填充分配的区域
根据 UITableViewCell 标签高度和宽度调整背景图片大小