我正在一个显示不同汽车的应用程序中工作,用户需要选择一个。当您按下旁边的汽车时,汽车会移出屏幕,然后新的汽车进入。
我的资源是:
(我需要将它们分开,因为当汽车移动时我需要旋转车轮)
我想避免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开发人员的主题后,我注意到RotateAnimation
旋转整个视图,包括填充轮子使轮子做一些奇怪的动作。
我该如何解决这个问题?
你能想出一个更好的方法来放置轮子ImageView
而不是使用填充吗?
我遇到的另一个问题是,在某一点上,我希望轮子停止移动,但Animation
中的方法cancel()是:自动:API等级8,我需要在1.5上工作。我应该如何停止轮换?
答案 0 :(得分:1)
你能想到一个更好的方法来放置轮子ImageView而不是使用填充吗?
我认为,“正确的答案”是创建自己的布局管理器。最少,这就是我们被告知的。我尝试了一次,无法让它发挥作用。
不太正确的答案可能是边距而不是填充 - 我没有尝试使用边距动画View
,因此我不知道边距是否会旋转。填充应该旋转,因为它被视为小部件的“内部”。
更正确的答案是使用透明View
作为垫片,而不是边距或填充。将ImageView
相对于垫片对齐,没有边距或填充,垫片的大小设置为将ImageView
定位在您想要的位置。
如果你知道如何回答是完全转储小部件,只需使用Canvas
和2D图形API绘制所有小部件。例如,“愤怒的小鸟”可能不会使用ImageViews
。