Android 開發的幾點小問題

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。




如果有疏漏,請您指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章