2010-01-25 9 views
13

사용자 정의 클래스 인 BitmapStorage가 있으며보기 또는 기타 유틸리티에 연결되지 않습니다.xml 파일에서 AnimationDrawable을로드하는 방법

<animation-list oneshot="true" > 
    <item drawable="@drawable/frame01" /> 
    <item drawable="@drawable/frame02" /> 
</animation-list> 

내가 (그래서 나를 위해 모든 구문 분석을 할 것이다 자원 클래스를 사용하여 애니메이션 드로어 블 AnimationDrawable로 XML 파일에서 애니메이션을로드 할 : 그리고 애니메이션 프레임 < 애니메이션 목록 >을 포함 born_animation.xml 파일이), 비트 맵을 추출하여 내 사용자 정의 저장소 클래스에 저장하십시오.

문제 난이 :

Resources res = context.getResources(); 
AnimationDrawable drawable = (AnimationDrawable)res.getDrawable(R.drawable.born_animation); 
assertTrue(drawable != null); <= fails! it's null 

무슨 일을? 누군가 나에게 설명 할 수 있니? 코드가 잘 컴파일됩니다. 모든 자원이 제자리에 있습니다. (dev에 가이드에 설명 같은) 구문 분석 할 이미지 뷰를 사용

ImageView view = new ImageView(context); 
view.setBackgroundResource(R.drawable.born_animation); 
AnimationDrawable drawable = (AnimationDrawable)view.getBackground(); 
assertTrue(drawable != null); <= fails! it's null 

결과가 동일 -

나는 다른 방법을 시도했다. 널 드로어 블을 리턴합니다.

모든 hinsts는 미리 감사드립니다.

+0

아래의 예를 참조하십시오. –

답변

6

야호, 내가 원인을 발견! :)

그것은 내 나쁜했다 :

  • 내가 안드로이드 사용하지 않았다 : 내 animation.xml 파일의 적절한 형식이 있었다하지 않았다 내가 결정 어떤 이유로 (속성의 네임 스페이스를 그렇지 않아 나는 res.getDrawable()가 올바른 애니메이션 드로어 블 AnimationDrawable 인스턴스를 반환하기 시작이 일을 해결 한 후 필수)
  • 나는 < 항목에서 > 태그

을 "기간"속성을 삭제.

는 Resources.NotFoundException에 더 정확하게 볼 수밖에 없었 그리고 getCause()의

26

코드

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/myprogress" 
       android:oneshot="false"> 
    <item android:drawable="@drawable/progress1" android:duration="150" /> 
    <item android:drawable="@drawable/progress2" android:duration="150" /> 
    <item android:drawable="@drawable/progress3" android:duration="150" /> 
</animation-list> 

그리기

:

ImageView progress = (ImageView)findViewById(R.id.progress_bar); 
if (progress != null) { 
    progress.setVisibility(View.VISIBLE); 
    AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable(); 
    frameAnimation.setCallback(progress); 
    frameAnimation.setVisible(true, true); 
} 

보기

<ImageView 
    android:id="@+id/progress_bar" 
    android:layout_alignParentRight="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/myprogress" /> 
+0

흠. 고마워,하지만 이것은 주로 dev 가이드의 코드입니다. 이것은 내가 원하는 것이 아닙니다. 실제로 ImageView를 만드는 것은 내가 필요로하지 않는 것입니다. 나는 이것을 해결 방법으로 사용했습니다. 나는 아무데도 그것을 전시하지 않을 것이다. ImageView없이 어떻게 할 수 있습니까? 왜 내가 시도한 첫 번째 변형 (res.getDrawable())이 작동하지 않습니까? – dimsuz

+1

View가 없으므로 View.findViewById를 사용할 수 없습니다. 이것은 유틸리티 클래스라고 말했기 때문에 저는 View.findViewById를 사용할 수 없습니다. 보기/활동에 대해 알지 못하는 라이브러리가 있다고 가정 해보십시오. 그러면 리소스를로드 할 수 없습니까?:) – dimsuz

+0

일단 활동이 끝나면 끝납니다. – RobinHood

3

: 잘못이가 "XML"디렉토리에서 리소스를로드하는 데 사용할 수 있는지 확인하려면.

Drawable myDrawable; 
Resources res = getResources(); 
try { 
    myDrawable = Drawable.createFromXml(res, res.getXml(R.xml.my_drawable)); 
} catch (Exception ex) { 
    Log.e("Error", "Exception loading drawable"); 
}