我用 ObjectAnimator 旋转了 TextView,如下所示:
ObjectAnimator rotate = ObjectAnimator.ofFloat(aRotatedTextView, "rotation", 0f, someAngle);
现在,我尝试在长按时拖放旋转的(!) TextView,如下所示:
public boolean onLongClick(View view) {
ClipData data = ClipData.newPlainText("DragData", (String) view.getTag());
DragShadowBuilder dragShadowBuilder = new View.DragShadowBuilder(view);
mDragInProgress = view.startDrag(data, dragShadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
所发生的情况是,创建的 DragShadow 没有旋转(角度==0)。我见过很多使用位图(但不是旋转)的示例,但我无法正常工作。
有没有办法创建旋转的 DragShadow?
需要同样的东西。像这样实现它(还包括缩放)
new OnTouchListener() {
@Override
public boolean onTouch(final View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
double rotationRad = Math.toRadians(view.getRotation());
final int w = (int) (view.getWidth() * view.getScaleX());
final int h = (int) (view.getHeight() * view.getScaleY());
double s = Math.abs(Math.sin(rotationRad));
double c = Math.abs(Math.cos(rotationRad));
final int width = (int) (w * c + h * s);
final int height = (int) (w * s + h * c);
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view) {
@Override
public void onDrawShadow(Canvas canvas) {
canvas.scale(view.getScaleX(), view.getScaleY(), width / 2,
height / 2);
canvas.rotate(view.getRotation(), width / 2, height / 2);
canvas.translate((width - view.getWidth()) / 2,
(height - view.getHeight()) / 2);
super.onDrawShadow(canvas);
}
@Override
public void onProvideShadowMetrics(Point shadowSize,
Point shadowTouchPoint) {
shadowSize.set(width, height);
shadowTouchPoint.set(shadowSize.x / 2, shadowSize.y / 2);
}
};
view.startDrag(null, shadowBuilder, view, 0);
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)