读《Android电视机(机顶盒)初次开发的一些经验分享》后的笔记

Posted 高速转弯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读《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、阴影、倒影的程序实现(完全可以由美工实现,这里代码只作参考)

倒影原理:基本上就是将原图倒置,画在画布上,然后加上一个半透明的蒙版。

 阴影效果:网上有很多讲阴影实现的教程,而这里实现的是在一个圆角矩形的图片四周加上阴影效果。实现办法是在原图四边加上矩形的阴影,然后在四个圆角的地方画扇形阴影来实现。

  1. /**  
  2.      * @author: sunnybaby 
  3.      * @Title: createShadowBitmap  
  4.      * @Description: 生成带阴影图片 
  5.      * @param orignalBitmap:原图 
  6.      * @param shadowMargin:阴影边宽 
  7.      * @param iconCornerRadius:原图圆角半径 
  8.      * @return :生成的带阴影图片 
  9.      */  
  10.     public static Bitmap createShadowBitmap(Bitmap orignalBitmap,  
  11.             int shadowMargin, int iconCornerRadius) {  
  12.         int w = orignalBitmap.getWidth();  
  13.         int h = orignalBitmap.getHeight();  
  14.         Bitmap shadowBitmap = Bitmap.createBitmap(w + shadowMargin * 2, h  
  15.                 + shadowMargin * 2, Config.ARGB_8888);  
  16.         int width = shadowBitmap.getWidth();  
  17.         int height = shadowBitmap.getHeight();  
  18.         Canvas canvas = new Canvas(shadowBitmap);  
  19.         canvas.drawBitmap(orignalBitmap, shadowMargin, shadowMargin, null);  
  20.         Paint paint = new Paint();  
  21.         paint.setXfermode(new PorterDuffXfermode(Mode.DST_OVER));  
  22.         int radius = shadowMargin + iconCornerRadius;  
  23.         // 四个边的阴影效果,采用线性阴影,宽度等于阴影边距+圆角半径  
  24.         LinearGradient leftGradient = new LinearGradient(radius, 0, 0, 0,  
  25.                 0x7F000000, 0x00000000, TileMode.CLAMP);  
  26.         LinearGradient rightGradient = new LinearGradient(width - radius, 0,  
  27.                 width, 0, 0x7F000000, 0x00000000, TileMode.CLAMP);  
  28.         LinearGradient topGradient = new LinearGradient(0, radius, 0, 0,  
  29.                 0x7F000000, 0x00000000, TileMode.CLAMP);  
  30.         LinearGradient bottomGradient = new LinearGradient(0, height - radius,  
  31.                 0, height, 0x7F000000, 0x00000000, TileMode.CLAMP);  
  32.         paint.setShader(leftGradient);  
  33.         canvas.drawRect(0, radius, radius, height - radius, paint);  
  34.         paint.setShader(rightGradient);  
  35.         canvas.drawRect(width - radius, radius, width, height - radius, paint);  
  36.         paint.setShader(topGradient);  
  37.         canvas.drawRect(radius, 0, width - radius, radius, paint);  
  38.         paint.setShader(bottomGradient);  
  39.         canvas.drawRect(radius, height - radius, width - radius, height, paint);  
  40.         // 四个角的阴影效果,采用圆形阴影,半径等于阴影边距+圆角半径  
  41.         RadialGradient topLeftCornerGradient = new RadialGradient(radius,  
  42.                 radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);  
  43.         RadialGradient topRightCornerGradient = new RadialGradient(width  
  44.                 - radius, radius, radius, 0x7F000000, 0x00000000,  
  45.                 TileMode.CLAMP);  
  46.         RadialGradient bottomLeftCornerGradient = new RadialGradient(radius,  
  47.                 height - radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);  
  48.         RadialGradient bottomRightCornerGradient = new RadialGradient(width  
  49.                 - radius, height - radius, radius, 0x7F000000, 0x00000000,  
  50.                 TileMode.CLAMP);  
  51.         // 画四个角,就是画四个圆心角为90度的扇形,drawArc函数第一个参数为圆弧所在圆的的外接矩形,第二个参数为起始角度,第三个参数为扇形顺时针滑过的角度,第四个参数如果为true时,在绘制圆弧时将圆心包括在内(用来画扇形),第五个参数为画笔  
  52.         paint.setShader(topLeftCornerGradient);  
  53.         canvas.drawArc(new RectF(0, 0, radius * 2, radius * 2), 180, 90, true,  
  54.                 paint);  
  55.         paint.setShader(topRightCornerGradient);  
  56.         canvas.drawArc(new RectF(width - radius * 2, 0, width, radius * 2),  
  57.                 270, 90, true, paint);  
  58.         paint.setShader(bottomLeftCornerGradient);  
  59.         canvas.drawArc(new RectF(0, height - radius * 2, radius * 2, height),  
  60.                 90, 90, true, paint);  
  61.         paint.setShader(bottomRightCornerGradient);  
  62.         canvas.drawArc(new RectF(width - radius * 2, height - radius * 2,  
  63.                 width, height), 0, 90, true, paint);  
  64.         return shadowBitmap;  
  65.     }  

 

以上是关于读《Android电视机(机顶盒)初次开发的一些经验分享》后的笔记的主要内容,如果未能解决你的问题,请参考以下文章

Android TV 盒子APP开发(一)--连接机顶盒与常用adb命令

android 解决连接电视机顶盒失败的方法

Android STB HDMI开发

android机顶盒真机调试方法

Android TV 开发之 TV视频播放器

电信定制机顶盒中兴B760D ROOT也不成功 求教 ROOT工具 或怎么打开开发调试模式