有人能在以下方面帮我吗-
1。它不应该粘在接触点上,它应该从任何点开始拖动。
2。dragshadowbuilder视图应在其未放置在正确目标上时设置动画。
最佳答案
我通过创建一个自定义的view.dragshadowbuilder类实现了这一点。
其代码为:
public class CustomDragShadowBuilder extends View.DragShadowBuilder {
View v;
public CustomDragShadowBuilder(View v) {
super(v);
this.v=v;
}
@Override
public void onDrawShadow(Canvas canvas) {
super.onDrawShadow(canvas);
/*Modify canvas if you want to show some custom view that you want
to animate, that you can check by putting a condition passed over
constructor. Here I'm taking the same view*/
canvas.drawBitmap(getBitmapFromView(v), 0, 0, null);
}
@Override
public void onProvideShadowMetrics(Point shadowSize, Point touchPoint) {
/*Modify x,y of shadowSize to change the shadow view
according to your requirements. Here I'm taking the same view width and height*/
shadowSize.set(v.getWidth(),v.getHeight());
/*Modify x,y of touchPoint to change the touch for the view
as per your needs. You may pass your x,y position of finger
to achieve your results. Here I'm taking the lower end point of view*/
touchPoint.set(v.getWidth(), v.getHeight());
}
}
将视图转换为从here获取的位图:
private Bitmap getBitmapFromView(View view) {
//Define a bitmap with the same size as the view
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
//Bind a canvas to it
Canvas canvas = new Canvas(returnedBitmap);
//Get the view's background
Drawable bgDrawable =view.getBackground();
if (bgDrawable!=null)
//has background drawable, then draw it on the canvas
bgDrawable.draw(canvas);
else
//does not have background drawable, then draw white background on the canvas
canvas.drawColor(Color.WHITE);
// draw the view on the canvas
view.draw(canvas);
//return the bitmap
return returnedBitmap;
}
虽然这是一个老问题,但对于其他想要使用自定义dragshadowbuilder的人来说可能会有帮助。
代码中的注释是不言而喻的,更多信息请告诉我。
希望有帮助。