public class BaseActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawable(null);//將視窗背景設定為空白,這樣就不會畫視窗背景,能提高效率
getWindow().setFormat(PixelFormat.RGBA_8888);//實現漸層效果需要
ActivityStackManager.getInstance().pushActivity(this);
}
private void initScreen(){
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
PengSetting.SCREEN_WIDTH = metric.widthPixels; // 螢幕寬度(像素)
PengSetting.SCREEN_HEIGHT = metric.heightPixels; // 螢幕高度(像素)
PengSetting.density = metric.density; // 螢幕密度(0.75 / 1.0 / 1.5)
System.out.println("width="+PengSetting.SCREEN_WIDTH+" height="+PengSetting.SCREEN_HEIGHT +" denisty="+PengSetting.density);
}
protected void onDestroy() {
super.onDestroy();
ActivityStackManager.getInstance().popActivity(this);
System.gc();
if(ActivityStackManager.getInstance().currentActivity() == null){
android.os.Process.killProcess(android.os.Process.myPid()) ;
System.exit(0);
}
}
}
試了:先將圖片轉為索引模式,再轉到RGB模式,光暈依然;將圖片轉到索引模式直接存成png格式,光暈依然;……反反覆複效果都不太滿意。找了這段代碼,讓程式加上,果然光暈不再。
Android PNG漸層背景圖片失真問題
最近一個困擾很久的問題,漸層效果的png圖片,設定為控制項圖片或background時,在eclipse上看著沒有什麼問題,但是在裝置上運行時,可以看到明顯的一圈圈的輪廓線,圖片嚴重失真。
在網上google了一下似乎這個問題很多人遇到,找到一種解釋是Android裝置display預設是採用16-bitscolor palette來表示所有顏色,因此對於帶alpha值的32位png圖片會出現顯示失真。
這個問題有兩種解決方案:
1.第一種方法最簡單直接(推薦),設定需要顯示Activity的PixelFormat,
getWindow().setFormat(PixelFormat.RGBA_8888);
PS:在onCreate()中直接加
RGBA_8888為android的一種32位顏色格式,R,G,B,A分別用八位表示,Android預設格式是PixelFormat.OPAQUE,其是不帶Alpha值的。設定之後可以看到圖片的顯示效果就和在PC上看到一樣,不會出現帶狀的輪廓線了。
2.第二種方法比較麻煩,就是將你需要要顯示的view設定為一個surfaceview,這樣也可以達到同樣的顯示效果,但這種方法代價較大,不推薦。
The artefact you are seeing is known as "banding"and it is a consequence of your display being16bits perpixel.(On Android 2.2 and lower thedefault pixel format is 16-bit(565/PixelFormat.OPAQUE ).)
The best way to resolve this is to add some "noise" to yourimage asset in Photoshop or Paint.NET.
Alternatively you can set your window to be 32bpp with thefollowing line added to your activity'sonCreate(),between super.onCreate() and setContentView().:
getWindow().setFormat(PixelFormat.RGBA_8888);或者PixelFormat.TRANSLUCENT
-----------------
如果以上方法依然不能實現去除手機中圖片顯示漸層存在光暈效果的話,你可以適一下在PS裡的處理方法:“Thebest way to resolve this is to add some "noise" to your image assetin Photoshop orPaint.NET”我用了這個方法數值設定的是1.5。算是解決了問題。雖然手機開發的很多情況下會使用.png格式,但是當圖片大小與品質並不匹配的時候,或許可以換一種檔案格式,在這裡建議使用jpg的,壓縮大小與品質相襯。
PS:這適用於很多情況,要相襯才好。
1. 採用硬體加速,在androidmanifest.xml中application添加 android:hardwareAccelerated="true"。不過這個需要在android 3.0才可以使用。
2. View中設定緩衝屬性.setDrawingCache為true.
3. 最佳化你的布局。通過Android sdk中tools目錄下的layoutopt 命令查看你的布局是否需要最佳化。
4. 動態載入View. 採用ViewStub 避免一些不經常的視圖長期握住引用.
5. 將Acitivity 中的Window 的背景圖設定為空白。getWindow().setBackgroundDrawable(null);android的預設背景是不是為空白。
6. 採用<merge> 最佳化布局層數。 採用<include >來共用布局。
7. 查看Heap 的大小
8. 利用TraceView查看跟蹤函數調用。有的放矢的最佳化。
9. cursor 的使用。不過要注意管理好cursor,不要每次開啟關閉cursor.因為開啟關閉Cursor非常耗時。 Cursor.require用於重新整理cursor.
10. 採用環形Buffer(可以採用鏈表資料結構實現)。可以設定一個鏈表長度的上限,根據手勢的變化來不斷地更新環形Buffer的內容。
11. 採用SurfaceView在子線程重新整理UI, 避免手勢的處理和繪製在同一UI線程(普通View都這樣做)。
12. 採用JNI,將耗時間的處理放到c/c++層來處理。
13. 有些能用檔案操作的,盡量採用檔案操作,檔案操作的速度比資料庫的操作要快10倍左右。
14. 懶載入和緩衝機制。訪問網路的耗時操作啟動一個新線程來做,而不要再UI線程來做。