gpt4 book ai didi

android - 汽车动画旋转的轮子

转载 作者:行者123 更新时间:2023-11-30 04:48:28 30 4
gpt4 key购买 nike

我在一个显示不同汽车的应用程序中工作,用户需要选择一个。当您按下下一辆车时,汽车会移出屏幕,新的汽车会进来。

我的资源是:

  • 车身
  • 车轮

(我需要将它们分开,因为当汽车移动时我需要旋转车轮)

我想避免使用 AbsoluteLayout,所以我的 CarView 扩展了 `RelativeLayout。这是代码:

public class CarView extends RelativeLayout {

private ImageView mBody;
private ImageView mLeftWheel;
private ImageView mRightWheel;
private float mScale;

public CarView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CarView(Context context) {
super(context);
}

public void initView(Car car) {
mScale = getContext().getResources().getDisplayMetrics().density;
Context ctx = getContext();
RelativeLayout.LayoutParams params;

params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
mBody = new ImageView(ctx);
mBody.setLayoutParams(params);
mBody.setImageResource(R.drawable.car_body);
addView(mBody);

params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
mLeftWheel = new ImageView(ctx);
mLeftWheel.setLayoutParams(params);
mLeftWheel.setImageResource(R.drawable.car_wheel);
mLeftWheel.setPadding(0, dpToPx(79), dpToPx(188), 0);
addView(mLeftWheel);


params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
mRightWheel = new ImageView(ctx);
mRightWheel.setLayoutParams(params);
mRightWheel.setImageResource(R.drawable.car_wheel);
mRightWheel.setPadding(dpToPx(203), dpToPx(75), 0, 0);
addView(mRightWheel);
}

public void startMoving() {

RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateAnimation.setDuration(900L);
rotateAnimation.setRepeatCount(Animation.INFINITE);

mLeftWheel.startAnimation(rotateAnimation);
mRightWheel.startAnimation(rotateAnimation);
}

private int dpToPx(float dp) {
return (int) (dp * mScale + 0.5f);
}
}

基本上我所做的是放置汽车的车身,然后使用填充物将车轮放置在它们应该在的位置。

看完this android developer's thread 我注意到 RotateAnimation 旋转了整个 View ,包括使轮子做一些奇怪运动的填充。

我应该如何解决这个问题?你能想到一种更好的方式来放置轮子 ImageView 而不是使用填充吗?

我遇到的另一个问题是,在某个时候我希望轮子停止移动,但是方法 cancel()Animation 中是因为:API 级别 8,我需要它在 1.5 上工作。我应该如何停止旋转?

最佳答案

Can you think of a better way to place the wheels ImageView instead of using padding?

我认为“正确答案”是创建您自己的布局管理器。至少,这就是我们被告知的。我试过一次,但无法正常工作。

不太正确的答案可能是边距而不是填充——我没有尝试用边距为 View 设置动画,所以我不知道边距是否会旋转。填充应该旋转,因为它被认为是小部件的“内部”。

更不正确的答案是使用透明的 View 作为垫片,而不是边距 填充。将您的 ImageView 相对于 shim 对齐,没有边距或填充,shim 的大小设置为将您的 ImageView 定位在您想要的位置。

如果你知道的话,最好的答案是完全转储小部件,然后使用 Canvas 和 2D 图形 API 将其全部绘制出来。例如,愤怒的小鸟大概不会使用 ImageViews

关于android - 汽车动画旋转的轮子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241808/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com