저는 Android 애니메이션에 매우 이상한 문제가 있습니다. 많은 다른 접근법과 구성 요소를 시도했지만 여전히 설명을 찾을 수 없습니다.FrameLayout의 뷰를 신속하게 전환하고 애니메이션을 적용하면보기가 엉망입니다.
나는 뷰의 컨테이너 인 FrameLayout과 버튼을 가지고 있습니다.
이 FrameLayout이 한 번에 하나의보기를 표시해야하고, 나는 버튼을 클릭하면, 나는 표시 다른보기에 FrameLayout이 원하는, 그리고 보기에 애니메이션을 시작 FrameLayout에서이 제거됩니다.여기서 구체성은 I 은 두 개의보기만을 사용하며이 두보기를 전환하려고합니다.
문제 :
내가 클릭을 중지 한 후 정말 빨리 버튼을 여러 번 클릭
는, 두 개의 뷰가 최고 떨어져 다른에서 동시에 하나에 표시됩니다, 그리고 사라지지 않습니다. 컨테이너는 여전히 하나의보기 만 포함하고 있습니다 ... 확실히 이상합니다!error screenshot http://i.minus.com/jDXyvUsE1LCOx.png
나는 간단한 예제와 함께이 문제를 재현 할 수 있었다 :
public class TestAnimActivity extends Activity implements OnClickListener {
private FrameLayout container;
private TextView current;
private TextView next;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
current = new TextView(this);
current.setText("View 1 YEAH");
next = new TextView(this);
next.setText(" View 2 DOH");
container = (FrameLayout) findViewById(R.id.container);
container.addView(current);
findViewById(R.id.button).setOnClickListener(this);
}
public void onClick(View v) {
Animation outAnimation = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
current.startAnimation(outAnimation);
container.addView(next);
container.removeView(current);
TextView temp = current;
current = next;
next = temp;
}
}
당신이 애니메이션은 이전 사람이 계속 실행되는 동안 뷰에서 시작, 그리고 그 길을 내가되고 볼 수 있듯이 어떻게 든 문제의 원인이 될 수 있습니다. 내가 애니메이션 관련 코드를 언급하는 경우
, 그것은 완벽하게 작동합니다 :
// Animation outAnimation = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
// current.startAnimation(outAnimation);
내가보기를 재사용 중지하고 대신 새로운 뷰를 작성하는 경우, 그것은 또한 완벽하게 작동합니다 :
// next = temp;
next = new TextView(this);
next.setText("View: " + new Random().nextInt());
하지만 돈 ' 새로운보기를 만들고 싶지 않습니다 :-).
문제는 부모로부터이 뷰를 추가/삭제하는 동안 뷰에서 애니메이션을 여러 번 시작하는 것과 관련이있는 것으로 보입니다.
내가 먼저 ViewFlipper과 노력, 다음 ViewAnimator 후 안드로이드의 소스 코드를 고개를 수동으로 문제를 재현하는이 일을 끝났다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click me fast" />
</LinearLayout>
이 시간 내 주셔서 감사합니다
당신은 여기 내 main.xml에이며, 레이아웃이 직접 테스트 할 수있게하려면!
답변 해 주셔서 감사합니다. 갤러리를 업데이트 할 때와 비슷한 문제가 있었는데 포커스가있는 항목은 애니메이션을 사용하여 확장되었습니다. 그러나 갤러리를 업데이트 할 때마다 이전 이미지가 보입니다. – Steve