博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 通过按键旋转屏幕
阅读量:6449 次
发布时间:2019-06-23

本文共 2765 字,大约阅读时间需要 9 分钟。

很好的帖子:

自己做的立方体旋转效果

Android多线程后台下源码

android仿酷狗播放器

 

-------------------帖子正文-----------------------

有个功能,通过长按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; }

 

 

 

 

 

 

转载地址:http://paowo.baihongyu.com/

你可能感兴趣的文章
shell练习-awk命令
查看>>
Canvas贝塞尔曲线
查看>>
Eclipse插件 Java反编译
查看>>
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
查看>>
MongoDB基本命令用法
查看>>
通过Windows Live Writer发布日志到各大博客
查看>>
hbase0.98.9中实现endpoints
查看>>
看 nova-scheduler 如何选择计算节点 - 每天5分钟玩转 OpenStack(27)
查看>>
修改默认ssh端口
查看>>
使用CocoaPods管理iOS的第三方类库
查看>>
Go 性能优化技巧 6/10
查看>>
我的Linux生涯之Mysql:Day04[Mysql之权限管理]
查看>>
javascript知识总结——标准时间与时间戳互换
查看>>
Spring @Async
查看>>
Python 函数
查看>>
制作自己的Winpe镜像(3):Wim镜像捕获及Wim镜像应用
查看>>
Java参数传递方式?
查看>>
我的友情链接
查看>>
设计模式之——适配器模式详解
查看>>
Spring Data JPA 简单介绍
查看>>