Android中通过按键旋转屏幕
来源:互联网 发布:让网络空间清朗起来 编辑:程序博客网 时间:2024/04/30 10:26
Q5有个功能,通过长按menu按键,可以旋转屏幕方向(0°或者90°),这个功能有时蛮有用的,下面来看看是如何实现的:
1 修改按键处理程序
frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
函数
public boolean interceptKeyTi(WindowState win, int code, int metaKeys, boolean down,
int repeatCount, int flags)
在处理菜单键的地方
if (code == KeyEvent.KEYCODE_MENU) {
final int chordBug = KeyEvent.META_SHIFT_ON;
if (down && repeatCount == 0) {
if (mEnableShiftMenuBugReports && (metaKeys & chordBug) == chordBug) {
Intent intent = new Intent(Intent.ACTION_BUG_REPORT);
mContext.sendOrderedBroadcast(intent, null);
return true;
} else if (SHOW_PROCESSES_ON_ALT_MENU &&
(metaKeys & KeyEvent.META_ALT_ON) == KeyEvent.META_ALT_ON) {
Intent service = new Intent();
service.setClassName(mContext, "com.android.server.LoadAverageService");
ContentResolver res = mContext.getContentResolver();
boolean shown = Settings.System.getInt(
res, Settings.System.SHOW_PROCESSES, 0) != 0;
if (!shown) {
mContext.startService(service);
} else {
mContext.stopService(service);
}
Settings.System.putInt(
res, Settings.System.SHOW_PROCESSES, shown ? 0 : 1);
return true;
}
}
//上面是原来的内容,下面是添加的新内容
else if (down && repeatCount == 20 && MenuKeyUp && (!keyguardOn)) {
//如果按下Menu键一定时间,抬起时执行此段函数
MenuKeyUp = false;
try {
int ro = mWindowManager.getRotation(); //获取当前方向
if( ro == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE ) {
ro = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
} else {
ro = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
}
}
catch (RemoteException e) {
Log.v(TAG, "!!! getRotation fail !!!");
}
try {
//旋转屏幕
mWindowManager.setRotation(ro, true, Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
//最后可跟不同的参数,可实现一些旋转效果
}
catch (RemoteException e) {
Log.v(TAG, "!!! mWindowManager.setRotation fail !!!");
}
return true;
}
if(!down) {
MenuKeyUp = true;
}
}
2 修改实现选择的函数
/frameworks/base/services/java/com/android/server/WindowManagerService.java
找到该函数
public boolean setRotationUncheckedLocked(int rotation, int animFlags)
将以下妨碍选择的内容注释掉
//rotation = mPolicy.rotationForOrientationLw(mForcedAppOrientation,
// mRotation, mDisplayEnabled);
3、当然也可以新作一个rotate键来选择屏幕,以下是引用代码
+ } else if (code == KeyEvent.KEYCODE_ROTATE) {
+ // ROTATE KEY pressed
+ if (down) {
+ mButtonPushFlg = true;
+
+ try {
+ int ro = mWindowManager.getRotation(); // Orientation vertical
+ if (ro == 3 ) {
+ mWindowManager.setRotation (Surface.ROTATION_0,true,mFancyRotationAnimation); //Orientation
landscape
+ } else {
+ mWindowManager.setRotation
(Surface.ROTATION_270,true,mFancyRotationAnimation); //Orientation
portlate
+ }
+ } catch (RemoteException e) {
+ // Igbore
+ Log.i("info", "Rotation failed ");
+ }
+ }
+ return true;
}
OK,重新编译后,长按Menu键即可实现屏幕旋转。
要学好嵌入式,还是建议买一个开发板,这样学习来会更快!
推荐下面4款,你可以根据你的经济能力来选一个
1、高级嵌入式开发板 ARM-A8内核,价格在2200~2700
X-210开发板(代码开放度高,XBOOT很牛)
Mini210开发板 (友善的板子,有沉淀)
2、入门级嵌入式开发板 ARM11内核 ,价格在500~650之间
Tiny6410 (友善之臂经典之作)
OK6410 (特点是支持WINCE7.0)
可以去风火轮团队的店里看一下,在他们那里买开发板有个好处,他们提供更周到的技术支持
风火轮技术开发团队 www.arm-cn.com
官方淘宝店:smartfire.taobao.com
原文:
- Android中通过按键旋转屏幕 zz
- Android中通过按键旋转屏幕
- Android中通过按键旋转屏幕
- Android中通过按键旋转屏幕
- Android中通过按键旋转屏幕
- Android中通过按键旋转屏幕
- Android中通过按键旋转屏幕
- Android 通过按键旋转屏幕
- 实现按键旋转屏幕
- Android中禁用屏幕旋转
- Android通过代码禁止屏幕旋转
- android 通过代码实现屏幕旋转
- 通过ADB旋转屏幕
- Android中屏幕旋转全解
- 长按menu按键旋转屏幕方向
- android 屏幕旋转v
- android 屏幕旋转
- android屏幕旋转
- emp 1
- 关于router name 的url重写 --frontname rewrite frontname重写
- FreeBSD disable touchpad
- javascript合法验证 js数据验证、js email验证、js url验证、js长度验证、js数字验证等
- 图像处理中各种边缘检测的微分算子
- Android中通过按键旋转屏幕
- 大学期间应当做的三件事
- 冷笑话一则
- 冷笑话一则
- 泛型
- WCF 在服务间共享端口
- 每日一句,每日10词【2】(26天)
- 冷笑话一则
- Hibernate Many-To-Many Revisited