프레임 애니메이션을 정의하고 실행하지만 찾을 수있는 모든 샘플 코드를 시도했지만 이미지 뷰는 변경되지 않습니다. ImageView의 원본 Image가 유지됩니다.프레임 애니메이션이 실행되지 않습니다.
EDIT : 여러 번 시도해 본 끝에 에뮬레이터 대신 휴대 전화에서 APK를 실행했습니다. 내 휴대 전화에서 작동하지만 어떤 이유인지 에뮬레이터에서는 작동하지 않습니다.
프레임 애니메이션을 정의하고 실행하지만 찾을 수있는 모든 샘플 코드를 시도했지만 이미지 뷰는 변경되지 않습니다. ImageView의 원본 Image가 유지됩니다.프레임 애니메이션이 실행되지 않습니다.
EDIT : 여러 번 시도해 본 끝에 에뮬레이터 대신 휴대 전화에서 APK를 실행했습니다. 내 휴대 전화에서 작동하지만 어떤 이유인지 에뮬레이터에서는 작동하지 않습니다.
의 맨 아래에 있습니다 에.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView view = (ImageView) findViewById(R.id.shell);
view.setVisibility(ImageView.VISIBLE);
view.setBackgroundResource(R.drawable.animation_frame);
view.post(new Runnable(){
public void run(){
AnimationDrawable frameAnimation = (AnimationDrawable) view.getBackground();
frameAnimation.start();
}
});
}
}
왜 이렇게해야하는지 알 수는 없습니다.
편집 :
final ImageView image1 = (ImageView) v.findViewById(R.id.coin1);
image1.post(new Runnable() {
@Override
public void run() {
AnimationDrawable ani = (AnimationDrawable) image1.getBackground();
ani.start();
}
});
XML 레이아웃 :
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/coin"
android:id="@+id/coin1"/>
동전 XML 여기 내 작업 프로젝트의 조각은 당신이 필요로하는 모든 것을 ... 자바
에서 onCreate에 있어야한다입니다 :
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/coin_spin_a" android:duration="100"/>
<item android:drawable="@drawable/coin_spin_b" android:duration="100"/>
<item android:drawable="@drawable/coin_spin_c" android:duration="100"/>
<item android:drawable="@drawable/coin_spin_d" android:duration="100"/>
<item android:drawable="@drawable/coin_spin_e" android:duration="100"/>
<item android:drawable="@drawable/coin_spin_f" android:duration="100"/>
</animation-list>
나는 그것에 대해서도 고심했다. 그것은 안드로이드 프레임 애니메이션 튜토리얼에서 설명하지만, "작은 글자"라고 말하자. 내가 거기에서 답을 복사하자 애니메이션 드로어 블 AnimationDrawable이 아직 완전히 부착되지 않기 때문에
그것은, 애니메이션 드로어 블 AnimationDrawable에서 호출 시작() 메소드는 액티비티의에서 onCreate() 메소드 중에 호출 할 수 없음을 유의하는 것이 중요합니다 창. 상호 작용을 필요로하지 않고 즉시 애니메이션을 재생하려는 경우 Activity에서 onWindowFocusChanged() 메소드를 호출하여 Android에서 윈도우를 포커스에 맞출 때 호출됩니다.
그것은 당신이에서 onCreate 스레드에서 애니메이션을 시작할 수없는 이유는, 그들이보기의 핸들러가 생성 된 어떤 스레드에 게시 할 필요가 정확하게 명확하지 않다 http://developer.android.com/guide/topics/graphics/view-animation.html#frame-animation
나는 그 충고를 따랐지만 이미지는 동일하게 남습니다. 내가 추가했습니다 : TextView top = (TextView) findViewById (R.id.top); \t top.setText ("Started"); after frameAnimation.start(); 청취자가 실제로 방아쇠를 당겼 음을 테스트합니다. 텍스트가 "시작됨"으로 변경되었지만 이미지가 변경되지 않았습니다. –
내가보기 엔 그것이 작동해야합니다. onWindowFocusChanged()에서 onCreate가 아닌 animation drawable을 설정할 수 있습니까? 차이는 있지만, 어쩌면 ... 그리고 코드가 여전히 작동하지 않는다면 다시 복사하십시오. –
schwiz 응답에 의견을 추가하고 싶습니다.
작업자 스레드에서 Handler.post를 호출하여 작업 할 수있었습니다. 아래는 샘플입니다.
public void onCreate(Bundle savedInstanceState) {
Thread t;
final ImageView activityIndicator;
final AnimationDrawable animiDrawable;
LinearLayout contentPlaceholder;
contentPlaceholder = (LinearLayout)this.findViewById(R.id.content_placeholder);
activityIndicator = new ImageView(this);
contentPlaceholder.addView(activityIndicator);
activityIndicator.setBackgroundResource(R.drawable.ic_activity_indicator_bar);
animiDrawable = (AnimationDrawable)activityIndicator.getBackground();
t = new Thread(new Runnable() {
@Override
public void run() {
mCbt.mThreadHandler.post(new Runnable() {
@Override
public void run() {
animiDrawable.start();
}
});
};
});
t.start();
}
코드를 사용하면 오류가 발생합니다. 14 행 : 새로운 Runnable() {}은 상속 된 추상 메소드를 구현해야합니다 Runnable.run(). Line16 : 토큰 "start"에 대한 구문 오류,이 토큰 다음에 식별자가 필요합니다. –
@Miles O'Keefe 그 일은 유감스럽게 생각합니다. – schwiz
이번에는 오류는 없지만 ImageView는 동일하게 유지됩니다. 이 코드가 효과가 있다면 작동중인 프로젝트를 업로드 할 수 있습니까? –