讀《Android電視機(機頂盒)初次開發的一些經驗分享》後的筆記
原文: http://blog.csdn.net/tanghongchang123/article/details/52982818
一、基本命令:
1、adb connect [ip]
2、 adb disconnect [ip]
3、adb uninstall [package]
4、.adb shell input text ****:用來輸入文字的,在調試程序的時候,很多情況下要鍵入文字,手機輸入方便,電視上,用遙控器按鍵盤非常麻煩的,可以用這個命令。
二、 焦點控制
1、控制控件是否可獲得焦點
android:focusable="true/false" 當這個屬性置為true時,表示當前控件可以獲得焦點,否則相反。也可以在程序中通過代碼
v.setFocusable(true/false);
2、控制按遙控器上下左右時下一個獲得焦點的控件
- android:nextFocusUp="@+id/..."
- android:nextFocusDown="@+id/..."
- android:nextFocusLeft="@+id/..."
- android:nextFocusRight="@+id/..."
- 以下是通過程序設置
- v.setNextFocusUp(id);
- v.setNextFocusDown(id);
- v.setNextFocusRight(id);
v.setNextFocusRight(id);
3、TV分辨率的適配問題
如果適配不對,容易出現OOM(out of memory)問題。按現有TV情況,一般建議設置
drawable-sw1080dp
drawable-sw720dp
相應地,提供對應分辨率下的尺寸:
values-sw1080dp
values-sw720dp
比如同樣的都是1080P,有的是32寸,有的是42寸。尺寸小,dpi高,使得圖片會被壓縮。在values文件裏,可以使用dp、PIX,默認dpi是160。也可以考慮values采用PX驗證一下。
4、陰影、倒影的程序實現(完全可以由美工實現,這裏代碼只作參考)
倒影原理:基本上就是將原圖倒置,畫在畫布上,然後加上一個半透明的蒙版。
陰影效果:網上有很多講陰影實現的教程,而這裏實現的是在一個圓角矩形的圖片四周加上陰影效果。實現辦法是在原圖四邊加上矩形的陰影,然後在四個圓角的地方畫扇形陰影來實現。
- /**
- * @author: sunnybaby
- * @Title: createShadowBitmap
- * @Description: 生成帶陰影圖片
- * @param orignalBitmap:原圖
- * @param shadowMargin:陰影邊寬
- * @param iconCornerRadius:原圖圓角半徑
- * @return :生成的帶陰影圖片
- */
- public static Bitmap createShadowBitmap(Bitmap orignalBitmap,
- int shadowMargin, int iconCornerRadius) {
- int w = orignalBitmap.getWidth();
- int h = orignalBitmap.getHeight();
- Bitmap shadowBitmap = Bitmap.createBitmap(w + shadowMargin * 2, h
- + shadowMargin * 2, Config.ARGB_8888);
- int width = shadowBitmap.getWidth();
- int height = shadowBitmap.getHeight();
- Canvas canvas = new Canvas(shadowBitmap);
- canvas.drawBitmap(orignalBitmap, shadowMargin, shadowMargin, null);
- Paint paint = new Paint();
- paint.setXfermode(new PorterDuffXfermode(Mode.DST_OVER));
- int radius = shadowMargin + iconCornerRadius;
- // 四個邊的陰影效果,采用線性陰影,寬度等於陰影邊距+圓角半徑
- LinearGradient leftGradient = new LinearGradient(radius, 0, 0, 0,
- 0x7F000000, 0x00000000, TileMode.CLAMP);
- LinearGradient rightGradient = new LinearGradient(width - radius, 0,
- width, 0, 0x7F000000, 0x00000000, TileMode.CLAMP);
- LinearGradient topGradient = new LinearGradient(0, radius, 0, 0,
- 0x7F000000, 0x00000000, TileMode.CLAMP);
- LinearGradient bottomGradient = new LinearGradient(0, height - radius,
- 0, height, 0x7F000000, 0x00000000, TileMode.CLAMP);
- paint.setShader(leftGradient);
- canvas.drawRect(0, radius, radius, height - radius, paint);
- paint.setShader(rightGradient);
- canvas.drawRect(width - radius, radius, width, height - radius, paint);
- paint.setShader(topGradient);
- canvas.drawRect(radius, 0, width - radius, radius, paint);
- paint.setShader(bottomGradient);
- canvas.drawRect(radius, height - radius, width - radius, height, paint);
- // 四個角的陰影效果,采用圓形陰影,半徑等於陰影邊距+圓角半徑
- RadialGradient topLeftCornerGradient = new RadialGradient(radius,
- radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);
- RadialGradient topRightCornerGradient = new RadialGradient(width
- - radius, radius, radius, 0x7F000000, 0x00000000,
- TileMode.CLAMP);
- RadialGradient bottomLeftCornerGradient = new RadialGradient(radius,
- height - radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);
- RadialGradient bottomRightCornerGradient = new RadialGradient(width
- - radius, height - radius, radius, 0x7F000000, 0x00000000,
- TileMode.CLAMP);
- // 畫四個角,就是畫四個圓心角為90度的扇形,drawArc函數第一個參數為圓弧所在圓的的外接矩形,第二個參數為起始角度,第三個參數為扇形順時針滑過的角度,第四個參數如果為true時,在繪制圓弧時將圓心包括在內(用來畫扇形),第五個參數為畫筆
- paint.setShader(topLeftCornerGradient);
- canvas.drawArc(new RectF(0, 0, radius * 2, radius * 2), 180, 90, true,
- paint);
- paint.setShader(topRightCornerGradient);
- canvas.drawArc(new RectF(width - radius * 2, 0, width, radius * 2),
- 270, 90, true, paint);
- paint.setShader(bottomLeftCornerGradient);
- canvas.drawArc(new RectF(0, height - radius * 2, radius * 2, height),
- 90, 90, true, paint);
- paint.setShader(bottomRightCornerGradient);
- canvas.drawArc(new RectF(width - radius * 2, height - radius * 2,
- width, height), 0, 90, true, paint);
- return shadowBitmap;
- }
讀《Android電視機(機頂盒)初次開發的一些經驗分享》後的筆記