- 浏览: 152133 次
- 来自: 深圳
-
最新评论
-
ritterliu:
您好,这个问题麻烦您看下http://topic.csdn.n ...
Android 2.2的锁屏界面修改 -
lnb333666:
不知道飞扬兄可否有空,可否加QQ339579300联系,想向您 ...
Android 2.2的锁屏界面修改 -
飞扬云:
<div class="quote_title ...
Android 2.2的锁屏界面修改 -
black_smart:
<div class="quote_title ...
Android 2.2的锁屏界面修改 -
飞扬云:
<div class="quote_title ...
Android 2.2的锁屏界面修改
Android 2.2的锁屏界面如图1所示,左右两侧是2个滑动条,正常状态下左边的是解锁,右边的是声音的开关,来电话时,左边是接听电话的解锁,右边是不接听来电的解锁。




text:当拖动左边的滑动条时,会出现“Unlock”文本,就是这个text。如图5所示。
图5
target: 当触摸到这个滑动条时,左、右边会各有一个点,就是目标点target,他起到一个临界指示作用,每次拖动滑动条达到这个临界点时就会触发解锁事件,解锁结束后就可以使用主界面了。如图6所示。要注意的是:这个目标点只是起到临界指示作用,没有别的含义。真正的临界点时看不见的,为了起到一个视觉的认识,在这里就使用这样一个目标点来代表临界点,下面会在代码中解释真正的临界点在哪里。
图6
在这个Slider内部类中有一个布局方法:void layout(int l, int t, int r, int b, int alignment)
核心代码是:
if (alignment == ALIGN_LEFT || alignment == ALIGN_RIGHT) {
// horizontal
Log.i(TAG,"Is this horizontal ?");
final int targetTop = (parentHeight - targetHeight) / 2;
final int targetBottom = targetTop + targetHeight;
final int top = (parentHeight - handleHeight) / 2;
final int bottom = (parentHeight + handleHeight) / 2;
if (alignment == ALIGN_LEFT) {
Log.i(TAG,"Is this leftBar? ");
// modified by zhuluofeng 2011-11-15
// 0 to 0+50,leftTarget to leftTarget+500
tab.layout(0, top, handleWidth, bottom);
text.layout(0 - parentWidth, top, 0, bottom);
text.setGravity(Gravity.RIGHT);
target.layout(leftTarget, targetTop, leftTarget + targetWidth, targetBottom);
Log.i(TAG,"targetTop is: " + targetTop);
Log.i(TAG,"targetBottom is: " + targetBottom);
alignment_value = l;
} else {
Log.i(TAG,"Is this RightBar?");
tab.layout(parentWidth - handleWidth, top, parentWidth, bottom);
text.layout(parentWidth, top, parentWidth + parentWidth, bottom);
target.layout(rightTarget, targetTop, rightTarget + targetWidth, targetBottom);
text.setGravity(Gravity.TOP);
alignment_value = r;
}
} else {
// vertical
Log.i(TAG,"Is this vertical ?");
final int targetLeft = (parentWidth - targetWidth) / 2;
final int targetRight = (parentWidth + targetWidth) / 2;
final int top = (int) (THRESHOLD * parentHeight) + handleHeight / 2 - targetHeight;
final int bottom = (int) ((1.0f - THRESHOLD) * parentHeight) - handleHeight / 2;
if (alignment == ALIGN_TOP) {
Log.i(TAG,"Is this TopBar ?");
tab.layout(left, 0, right, handleHeight);
text.layout(left, 0 - parentHeight, right, 0);
target.layout(targetLeft, top, targetRight, top + targetHeight);
alignment_value = t;
} else {
Log.i(TAG,"Is this BottomBar ?");
// modified by zhuluofeng 2011-11-15
// bottom to bottom+500, parentHeight - handleHeight to parentHeight - handleHeight-50
// the bottom is the right side
tab.layout(left, parentHeight - handleHeight, right, parentHeight);
text.layout(left, parentHeight, right, parentHeight + parentHeight);
target.layout(targetLeft, bottom, targetRight, bottom + targetHeight);
Log.i(TAG,"the vertical bottom is: " + bottom);
Log.i(TAG,"the vertical targetHeight is: " + targetHeight);
alignment_value = b;
}
}
这段代码其实就一个if else控制语句,if (alignment == ALIGN_LEFT || alignment == ALIGN_RIGHT) 表示:
手机处在竖屏时(即滑动条处在水平方向),如果拖动左边的滑动条或者拖动右边的滑动条时的处理方法。
else中的代码表示手机处于横屏时(即滑动条处在竖直方向),如果拖动下面的滑动条或者拖动上面的滑动条的处理方法。
在大的if语句中包含了一个if else语句,if表示的是左边的滑动条,else就是右边的滑动条;在大得else语句中也包含了一个if else语句,if表示的是竖直方向的上面的滑动条,else表示的是竖直方向的下面的滑动条。
理解了这一点就很容易定位到具体的滑动条的代码了。
先修改当手机处在竖直方向时(即滑动条处在水平方向)左边的解锁滑动条的距离,目标点的距离。
a) 将左边的滑动条tab向右边移动下
看上面紫红颜色的代码,将andleWidth加上一个数值即可,比如我们加上50变成:
tab.layout(0, top, handleWidth + 50, bottom);
那这几个参数是什么意思呢?
public void layout (int l, int t, int r, int b)
Assign a size and position to a view and all of its descendants
This is the second phase of the layout mechanism. (The first is measuring). In this phase, each parent calls layout on all of its children to position them. This is typically done using the child measurements that were stored in the measure pass().
Derived classes should not override this method. Derived classes with children should override onLayout. In that method, they should call layout on each of their children.
Parameters
Left position, relative to parent |
Top position, relative to parent |
Right position, relative to parent |
Bottom position, relative to parent
|
评论
http://topic.csdn.net/u/20120730/15/8d3dacf2-7196-4e5e-a325-0e16a87208f6.html
我现在已经不在做UI这一块了,不过可以讨论,交流,谢谢。。。
我现在 需要做一个仿htc的滑动锁屏界面,由于刚接触不久 ,也没有很好的思路,能否指点一二呢?(直接在framework里面修改的话感觉改动挺大的,而且不知道怎样去实现)
:)
一般来说,源码那么大,全面掌握太难,我这里基本上就是在做项目中熟悉基本架构,然后学会使用grep find命令去搜索,这样就很容易定位到某个文件。比如:如果你看到某个图片,先可以在目录下查找,找到后,可以通过这个图片得名子去搜索和这个图片相关的文件。你查看多了,自然就会了解目录结构了。一般来说,图片和各种在资源在framework以及package下面的res里面。好了,这也是我大概学习的过程,仅供参考。你多和你同事沟通,时间长了,肯定有自己的方法。。。如果有好的方法,还请提供一下,互相学习。。。
我现在已经不在做UI这一块了,不过可以讨论,交流,谢谢。。。
我现在 需要做一个仿htc的滑动锁屏界面,由于刚接触不久 ,也没有很好的思路,能否指点一二呢?(直接在framework里面修改的话感觉改动挺大的,而且不知道怎样去实现)
我现在已经不在做UI这一块了,不过可以讨论,交流,谢谢。。。
相关推荐
8. **GO 锁屏四点锁屏主题 1.02 (v204).apk**:这是GO锁屏的一个主题包,用户可以更改锁屏的样式和解锁方式,提高个性化体验。 9. **GO 桌面EX通讯统计 1.6 (v7).apk**:这是一个统计用户通信习惯的应用,可能...
紧急呼救功能通常位于锁屏界面上方的一个明显位置,用户可以通过点击该按钮直接拨打预设的紧急电话号码(如110、119等),而无需先解锁手机。这一功能的初衷是为了在紧急情况下让用户能够快速获得帮助。但同时,这也...
ANDROID 界面刷新 174 MESSAGE HANDER 175 用法: 175 线程与子线程调用MessageHander 177 Messagehandler实例 177 8、数据存储与读取 179 1. PREFERENCES 179 2. FILES 180 3. DATABASES 180 4. NETWORK 183 5、...
- `ic_lock_idle_xxx`:锁屏界面提示图标 - `ic_menu_xxx`:系统菜单图标 - `stat_notify_xxx`:状态栏提示图标 - `stat_sys_battery_xx`:电池图标 - `stat_sys_battery_charge_animX`:充电时电池图标动画 - `stat...
- **修改锁屏背景**:锁屏背景通常是通过设置背景资源文件来控制的。 - **修改紧急呼叫图标**:紧急呼叫图标的资源文件同样位于`res/drawable`目录下。 **2.3 StatusBarUI修改** - **修改StatusBar显示图标**:...
CTS 测试是一种 Android 系统资源修改的合法性检测方法,主要应用于手机行业工作。下面是 CTS 测试相关操作的详细说明: 一、CTS 测试相关操作 1. 确保版本正确,版本必须使用正式发布的版本。 2. 开启 WiFi 并...
webOS主题主要通过修改系统的视觉元素来实现个性化,包括但不限于桌面壁纸、启动图标、日历图标、锁屏界面、系统通知栏等。这些主题不仅能够改变设备的外观,还可能调整UI交互体验,如表情符号、波浪形Launcher界面...
**2.2 登录状态管理** - **目标:** 测试登录状态的维护和异常处理能力。 - **测试点:** - 用户名密码错误时的提示信息。 - 用户退出登录后,重新启动应用应返回登录界面。 - 自动登录功能的有效性及安全性。 - ...