Я работаю в приложении, которое показывает разные автомобили, и пользователь должен выбрать один. . При нажатии на следующие шаги автомобиля из экрана и новый человек приходит вАвтомобильная анимация вращающихся колес
Мои ресурсы: тело
- Автомобиля
- колеса Автомобиля
(мне они нужны чтобы быть отделены, потому что, когда автомобиль движется, мне нужно вращать колеса)
Я хотел избежать AbsoluteLayout
, поэтому мой CarView
расширяет `RelativeLay вне. Вот код:
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
вместо использования прокладки?
Еще одна проблема заключается в том, что в определенной точке я хочу, чтобы колеса перестали двигаться, но метод cancel() в Animation
есть с: API 8-го уровня, и мне это нужно для работы на 1.5. Как мне остановить вращение?
Я протестировал это, и я могу подтвердить, что поля не вращаются, поскольку API говорит: «Это пространство выходит за пределы этого представления». ([ViewGroup.MarginLayoutParams] (http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html)) – st4r0pr4m