Jelly Bean的发布已经有几天了,上周我们尝试了下将其在我们的机器上带起,折腾了半天,总算是起来了,不过发现些问题,先总结一下.
这几个问题:
- openGL的编译问题,是因为google整理了他们的文件命名方式,现在那个头文件统一叫 ANativeObjectBase.h,放在 /frameworks/native 下了。
- HAL的段错误问题,原因也是找到了,是HMI(HAL module Info)在各个HAL中,被定义成const型了,但在hardware.c的load函数中,会有
hmi->dso = handle;
修改了只读变量,这在JB上会造成段错误而crash,但之前版本不会,应该是新增的编译选项引起的吧。 - openGL的问题,需要厂商重新给驱动了,这没法把。JB的新增功能vsync,看其中很多工作是要hwcomposer来实现,看来一时半会这个搞不定。
初步带起,不用openGL,慢就慢点,先看看功能和其他地方。目前我禁用hardware openGL方法是:
系统BoardConfig中,将USE_HW_COMPOSER设为false,同时拦下harwareAccelerated的请求,用soft路子的skia实现。
如 frameworks/base/core/java/android/view/Window.java
LocalWindowManager(WindowManager wm, boolean hardwareAccelerated) { super(wm, getCompatInfo(mContext)); // mHardwareAccelerated = hardwareAccelerated || // SystemProperties.getBoolean(PROPERTY_HARDWARE_UI, false); mHardwareAccelerated = false; }
还有其他地方,可以搜下源码,将所有hardwareAccelerated 赋值的地方改成false就好。
将wallpaper去掉,老死掉,现阶段还不想看它,禁用方法:
修改 frameworks/base/core/res/res/values/config.xml
<!-- True if WallpaperService is enabled --> <!-- Temporarily set to false until openGL is ready. --> <bool name="config_enableWallpaperService">false</bool>
完成后,编译固件,烧写,装几个apk:
游戏太卡,几乎玩不动。
JB上,调试功能接口又增加了一些:
将近一个月没有写博文了,主要是这个月没有做什么有技术含量的工作,也就没做什么总结。
项目需求,需要一个实现一个单帧的旋转动画,来提示当前进度,类似与圆圈型的progressbar。
首先定义anim文件:
<rotate android:interpolator="@android:anim/linear_interpolator" android:fromDegrees="0" android:toDegrees="+359" android:pivotX="50%" android:pivotY="50%" android:repeatMode="restart" android:repeatCount="infinite" android:duration="2000" />
这就是以显示的图片问中心的无限旋转动画,然后对相应的组件使用该动画:这时我们发现效果不是匀速旋转,也就是说我们在xml里定义的android:interpolator="@android:anim/linear_interpolator"没有起到应有的作用,通过查找资料,发现该属性需要在代码里设定才能达到效果,于是实验了一下,发现确实如此,代码如下:
my_rotate.xml文件如下:
<rotate android:fromDegrees="0" android:toDegrees="+359" android:pivotX="50%" android:pivotY="50%" android:repeatMode="restart" android:repeatCount="infinite" android:duration="2000" />
java代码如下:
Animation anim = AnimationUtils.loadAnimation(this, R.anim.my_rotate); LinearInterpolator lir = new LinearInterpolator(); anim.setInterpolator(lir); findViewById(R.id.test).startAnimation(anim);
这时新问题又出现了,这个动画效果应因为定义的是无限循环的,当我们作为圆形的progressbar使用时没法停止该动画效果,即使我们在符合触发条件时把相应的控件设置为不可见,其动画效果依然在屏幕上旋转,该怎么办呢?
同样通过百度,我们发现android提供了一个clearAnimation()方法,用于动画的清除,这时在满足我们的progressbar停止条件时,我们让相应控件调用clearAnimation()方法,然后在将其设置为不可见就实现了类progressbar效果。
按键字体颜色设置
ui->ExitpushButton->setStyleSheet("\
QPushButton {\color: white;\
border-image: url(/blog_article/_/pics/button.png);\
border-width: 12px;\
padding: -12px 0px;\
min-height: 25px;\
min-width: 60px;\
}\
QPushButton:pressed {\
color: lightgray;\
border-image: url(/blog_article/_/pics/button-pressed.png); \
padding-top: -10px;\
padding-bottom: -16px;\
}\
");
参考:http://www.developer.nokia.com/Community/Wiki/%E4%BD%BF%E7%94%A8Qt_Style_Sheets%E5%88%B6%E4%BD%9CUI%E7%89%B9%E6%95%88
label 字体颜色设置
ui->now_object->setText("<font color=red>chaoche</font>");