and12

本文介绍了一种在Android中实现的特殊UI效果——拖动时显示翅膀动画的方法。该动画会在用户拖动屏幕上的元素时出现,并随着元素的移动而变化。文章详细描述了如何根据当前的操作状态和屏幕位置来启动和更新动画,以及如何绘制左右两侧的辅助图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private void drawWingsImg(Canvas canvas) {
if (workspace.isScrollerFinished()) {
if (mDragging) {
if (transferAt == null) {
startWingsAnimation(WINGS_START_VECTOR, WINGS_END_VECTOR, WINGS_INCREMENT, WINGS_SLEEP_TIME);
}

if (!transferAt.isAlive() && needWingsAnimation) {
if (changeWingsAnimationState) {
if (transferAtListener.getAnimationState() == DragLayerAnimationThread.MOVE_IN
&& transferAt.getCurrentScale() > WINGS_START_VECTOR) {
startWingsAnimation(transferAt.getCurrentScale(), WINGS_START_VECTOR, WINGS_INCREMENT,
WINGS_MOVE_IN_SLEEP_TIME);
} else if (transferAtListener.getAnimationState() == DragLayerAnimationThread.MOVE_OUT
&& transferAt.getCurrentScale() < WINGS_END_VECTOR) {
startWingsAnimation(transferAt.getCurrentScale(), WINGS_END_VECTOR, WINGS_INCREMENT,
WINGS_MOVE_OUT_SLEEP_TIME);
}
} else {
startWingsAnimation(WINGS_START_VECTOR, WINGS_END_VECTOR, WINGS_INCREMENT, WINGS_SLEEP_TIME);
}
}
} else {
if (transferAt != null) {
if (transferAt.isAlive()) {
transferAt.setAnimationState(AnimationThread.STATE_ZOOM_OUT);

} else if (needWingsAnimation && transferAt.getCurrentScale() != WINGS_START_VECTOR) {

startWingsAnimation(transferAt.getCurrentScale(), WINGS_START_VECTOR, WINGS_INCREMENT,
WINGS_SLEEP_TIME);
}
} else {
return;
}
}

int currentScreen = workspace.getCurrentScreen();
int currentGroup = workspace.getCurrentGroup();


if (currentScreen != 0 || currentGroup != 0) {
drawLeftDragImg(canvas);
}


if (currentScreen != 1
|| currentGroup != GroupInfoProvider.getInstance(getContext()).getGroupCount() - 1) {
drawRightDragImg(canvas);
}
}
}

private void drawLeftDragImg(Canvas canvas) {
int offset = getDragWingsOffset();
Drawable leftDragNormal = getResources().getDrawable(R.drawable.left_drag_normal);
Drawable leftDrag = getResources().getDrawable(R.drawable.left_drag);
Bitmap arrowheadLeftNormal = BitmapFactory.decodeResource(getResources(), R.drawable.arrowhead_left_normal);
Bitmap arrowheadLeft = BitmapFactory.decodeResource(getResources(), R.drawable.arrowhead_left_active);

canvas.save();
canvas.translate(transferAt.getCurrentScale(), 0);
if (mScrollState == SCROLL_WAITING_IN_ZONE && mScrollRunnable.mDirection == SCROLL_LEFT) {

leftDrag.setBounds(0, offset, SCROLL_ZONE_IMG_WIDTH, offset + calculate.getDragWingsHeight());
leftDrag.draw(canvas);

canvas.drawBitmap(arrowheadLeft, (SCROLL_ZONE_IMG_WIDTH - arrowheadLeft.getWidth()) / 2, getHeight() / 2
- arrowheadLeft.getHeight() / 2, imgPaint);
} else {
leftDragNormal.setBounds(0, offset, SCROLL_ZONE_IMG_WIDTH, offset + calculate.getDragWingsHeight());
leftDragNormal.draw(canvas);

canvas.drawBitmap(arrowheadLeftNormal, (SCROLL_ZONE_IMG_WIDTH - arrowheadLeftNormal.getWidth()) / 2, getHeight() / 2
- arrowheadLeftNormal.getHeight() / 2, imgPaint);
}
canvas.restore();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值