나는 drawable 디렉토리에 표시된 일련의 정지 이미지와 총 500 개 이상의 이미지를 가지고 있습니다. 애니메이션 (초당 약 20 이미지로드)을 만들어야합니다. Out of Memory Exception없이 원활하게 실행되기를 바랍니다.Android : 정지 이미지에서 애니메이션 만들기
2 ~ 3 초 (40 ~ 60 이미지)의 이미지를 메모리에로드하여 표시 한 다음 메모리를 해제하고 다음 2 ~ 3 초 동안 이미지를 처리해야한다는 생각이 들었습니다. 로드해야합니다. 이 기술은 메모리 부족 예외를 방지 할 수 있습니다. 그것의 다만 생각, 나는 좋은 아이디어다는 것을 있건 없건간에 모른다. 좀 더 좋은 아이디어를 몇 가지 코드와 함께 안내해주십시오 ... 제 아이디어가 훨씬 훌륭하고 잘 작동한다면, 저에게 도움이되는 코드를 알려주시기 바랍니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/llMain">
<ViewFlipper android:id="@+id/imageflipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView android:id="@+id/ImageView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerInside"
android:layout_gravity="center" />
</ViewFlipper>
</LinearLayout>
을 여기에 애니메이션을 수행하기위한 내 코드입니다 :
당신이 제안으로 답장을 읽고 수행 한 후,이 같은 일부 코드를 작성했습니다
public class Animation extends Activity {
ViewFlipper flipper;
int myIndex = 216;
private final Handler handler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
flipper=(ViewFlipper)findViewById(R.id.imageflipper);
doTheAutoRefresh();
//displayData();
}
private void doTheAutoRefresh() {
handler.postDelayed(new Runnable() {
public void run(){
displayData(); // this is where you put your refresh code
doTheAutoRefresh();
}
}, 30);
}
private void displayData()
{
Resources r = getResources();
if(myIndex > 230){
myIndex = 216;
ImageView myImg = (ImageView)findViewById(R.id.ImageView01);
myImg.setImageResource(r.getIdentifier("drum0" + myIndex, "drawable", "com.vt.animation"));
myIndex += 1;
flipper.showNext();
}
else{
ImageView myImg = (ImageView)findViewById(R.id.ImageView01);
myImg.setImageResource(r.getIdentifier("drum0" + myIndex, "drawable", "com.vt.animation"));
myIndex += 1;
flipper.showNext();
}
}
}
을 하지만 매우 느립니다. 새로 고침 시간을 30 밀리 초로 설정했지만 실제로는 새로 고치지 않을 때 새로 고침하는 시간이 약 1 초입니다. 실제 애니메이션처럼 느껴지려면 어떤 제안이라도 빨리?
고마워요,
@ Mudasser Hassan 서버 측의 모든 이미지가 있으면 모든 이미지를 다운로드하고 해당 유형의 작업을 수행해야합니다. (비디오 또는 이미지 애니 메이팅 재생). 어떻게해야합니까? 360도 회전과 같은 모든 이미지가 단일 이미지를 회전시켜야합니다. http://www.mathieusavard.info/threesixty/demo.html –
고마워요. 모든 이미지가 서버에서 온 것이므로 모든 이미지를 다운로드하여 표시해야합니다. 생각 좀 해봤 니? 나는 그 문제에 직면하고있다. 도와주세요. –
'Handler.post()'를 사용하면 코드가 더 짧아집니다. 또 다른 문제는 UI 스레드에서 이미지를 디코딩한다는 것입니다.좀 더 우아한 해결책은 미리 백그라운드에서 다음 이미지를 디코딩하고 (AsyncTask를 사용하여) 200ms가 지난 후 또는 이미지가 디코딩 된 후에 표시하는 것입니다. – Mixaz