開機動畫

播放動畫用過的2中方式html

1.using the AnimationDrawable classjava

2.用android sdk提供的Movie類實現android

第一種方法能夠參見http://developer.android.com/guide/topics/graphics/drawable-animation.html
canvas

這個方法缺點是和美工配合起來不是很方便,並且幀多了,要打包的圖片也多了api

第二種方式改自android sdk提供的例子,直接播放gifide

sdk\samples\android-18\legacy\ApiDemos\src\com\example\android\apis\graphics\BitmapDecode.java動畫

    private static class SampleView extends View {
        private Movie mMovie;
        private long mMovieStart = 0;

        //Set to false to use decodeByteArray
        private static final boolean DECODE_STREAM = true;

        private static byte[] streamToBytes(InputStream is) {
            ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
            byte[] buffer = new byte[1024];
            int len;
            try {
                while ((len = is.read(buffer)) >= 0) {
                    os.write(buffer, 0, len);
                }
            } catch (java.io.IOException e) {
            }
            return os.toByteArray();
        }

        public SampleView(Context context) {
            super(context);
            setFocusable(true);

            java.io.InputStream is;

            is = context.getResources().openRawResource(R.drawable.start_up);

            if (DECODE_STREAM) {
                mMovie = Movie.decodeStream(is);
            } else {
                byte[] array = streamToBytes(is);
                mMovie = Movie.decodeByteArray(array, 0, array.length);
            }
            // 高版本的android系統須要這麼處理,才能顯示動畫
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){
                setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }
            
            setBackgroundColor(0x91CB58);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(0xFF91CB58);
            

            long now = android.os.SystemClock.uptimeMillis();
            if (mMovieStart == 0) {   // first time
                mMovieStart = now;
            }
            
            if (mMovie != null) {
                
                int dur = mMovie.duration();
                if (dur == 0) {
                    dur = 1000;
                }
                // 只播放一次
                int relTime = (int)((now - mMovieStart) /*% dur*/);
                if (relTime <= dur){
                    mMovie.setTime(relTime);
                }
                else{
                    mMovie.setTime(dur);
                }
                
                
                mMovie.draw(canvas, (getWidth() - mMovie.width()) / 2,
                        (getHeight() - mMovie.height()) / 2);
                
                invalidate();
            }
        }
    }

public class WelcomeActivity extends Activity{
...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
        setContentView(new SampleView(this));
        
        NecessaryInitialization task = new NecessaryInitialization();
        task.setActivity(this);
        task.execute();
    }
...
}
相關文章
相關標籤/搜索