다른 자동차를 보여주는 앱에서 작업 중이므로 사용자가 하나를 선택해야합니다. . 화면에서 다음 차량 이동에 눌러 새로운 사람이 오면자동차 애니메이션 회전 바퀴
내 자원은 다음과 같습니다
- 자동차의 몸
- 자동차의 바퀴
(내가 그들을 필요 자동차가 움직일 때 나는 바퀴를 돌릴 필요가 있기 때문에 분리 될 것임)
내가 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
일까요?
내가 가지고있는 또 다른 문제는 바퀴가 움직이기를 멈추고 싶지만 Animation
의 메소드 cancel()은 API 레벨 8이고 1.5에서 작동해야합니다. 회전을 어떻게 멈추어야합니까?
나는 이것을 테스트했으며, API가 말한 것처럼 여백이 회전하지 않는 것을 확인할 수 있습니다 : "이 공간은이보기의 경계 밖에 있습니다." ([ViewGroup.MarginLayoutParams] (http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html)) – st4r0pr4m