1.ImageView 每隔100ms更換一張顯示圖片過程中出現OOM錯誤解決方案:
BitmapDrawable bitmapDrawable = (BitmapDrawable) image.getDrawable();
// 如果圖片還未回收,先強制回收該圖片
if (bitmapDrawable != null && !bitmapDrawable.getBitmap().isRecycled()){
bitmapDrawable.getBitmap().recycle();
}
image.setImageBitmap(BitmapFactory.decodeStream(assetFile));
2.assets檔案夾下面的檔案名稱不能包含中文。
Android 基於Linux系統,Linux 允許在檔案名稱中使用除上述符號之外的其它符號, 但並不建議使用者這樣做。如果Windows 下面檔案名稱包含中文字元的檔案,複製到Android項目的assets檔案夾下面,運行此Android項目會報錯,去掉檔案名稱中的特殊字元就OK了。
3. 自訂View組件時候,如果重寫onTouchEvent方法,不要返回return super.onTouchEvent(event),應該修改為return true,原因是:
(1)父類的onTouchEvent(event)方法可能沒有做任何處理,但是返回了false。
( 2)一旦返回false,在該方法中再也不會收到MotionEvent.ACTION_MOVE及MotionEvent.ACTION_UP事件。
4.關於SuifaceView畫圖: Access to the underlying surface is provided via the SurfaceHolder interface, which can be retrieved by callinggetHolder()
. 通過getHolder()方法得到SurfaceHolder 介面: SurfaceHolder surfaceHolder = getHolder();
SurfaceView如何畫圖呢?
(1)對Canvas進行加鎖
//擷取canvas執行個體
Canvas canvas = surfaceHolder.lockCanvas();
(2)進行相應的畫圖操作
canvas.drawCircle(float cx, float cy, float radius, Paint paint);
(3).對Canvas進行解鎖,將畫好的畫布提交,也就是進行重畫
surfaceHolder.unlockCanvasAndPost(canvas);
View與SurfaceView區別
1.SurfaceView是View的子類。
2.View缺乏緩衝機制,只能整個View更新;SurfaceView有雙緩衝機制,可以局部更新;
3.SurfaceView是在一個新起的單獨線程中可以重新繪製畫面,而View必須在UI的主線程中更新畫面。
如果更新頻率頻繁,用SurfaceView,否則用View。
如果有疏漏,請您指正。