Activity用户点击转屏后,恢复自由转屏
来源:互联网 发布:自动抢红包软件 编辑:程序博客网 时间:2024/06/03 18:18
场景:在播放器界面,用户旋转手机,自动横竖屏切换,当用户处于竖屏点击全屏按钮时,应该转到横屏(使用Activity.setRequestedOrientation会导致屏幕固定为横屏)
方案如下,不使用系统的自动转屏,自动转屏代码完全自己控制,代码如下:
用户点击全屏和竖屏调用 setActivityOrientation
import android.app.Activity;import android.content.pm.ActivityInfo;import android.util.Log;import android.view.OrientationEventListener;/** * Activity方向控制,主要解决点击转屏后不能恢复到自由转屏状态问题。 * */public class ActivityOrientationControl { private static final String TAG = ActivityOrientationControl.class.getSimpleName(); private Activity mActivity; private OrientationEventListener mOrientationEventListener; private int mUserClickRecordCurrOrientation = -1; public ActivityOrientationControl(Activity activity) { mActivity = activity; mOrientationEventListener = new OrientationEventListener(activity) { @Override public void onOrientationChanged(int orientation) { if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) { // 手机平放时,检测不到有效的角度 return; } // 只检测是否有四个角度的改变 if (orientation > 350 || orientation < 10) { orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } else if (orientation > 80 && orientation < 100) { orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; } else if (orientation > 170 && orientation < 190) { orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; } else if (orientation > 260 && orientation < 280) { orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; } else { return; } Log.d(TAG, "orientation = " + orientation); if (mUserClickRecordCurrOrientation == orientation) { // 用户停留在点击时所处的方向,不要让重力感应改变方向 return; } else if (mUserClickRecordCurrOrientation != -1) { // 用户离开点击时所处的方向,变为可以自由旋转 mUserClickRecordCurrOrientation = -1; return; } switch (orientation) { case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT: mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE: mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; default: break; } } }; } public void enable() { if (mOrientationEventListener.canDetectOrientation()) { mOrientationEventListener.enable(); } } public void disable() { if (mOrientationEventListener.canDetectOrientation()) { mOrientationEventListener.disable(); } } public void setActivityOrientation(int orientation) { mUserClickRecordCurrOrientation = mActivity.getRequestedOrientation(); switch (orientation) { case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT: mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE: mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; } }}
阅读全文
0 0
- Activity用户点击转屏后,恢复自由转屏
- android bundle 在activity之间传递数据 点击一组图片放大,再次点击恢复
- 倒计时恢复按钮点击
- 生命周期--保存&&恢复activity
- Android 恢复Activity现场
- Activity之数据恢复
- 恢复Activity状态
- activity 暂停与恢复
- 暂停和恢复Activity
- Android 恢复Activity现场
- activity 点击动画特效
- unity3d/用户自由改变背景色
- 用户备份的恢复
- Activity监听触屏一定和按键点击事件
- Android 横屏启动activity,点击屏幕的单击、双击
- Activity生命周期 之 暂停和恢复Activity
- Activity生命周期之暂停和恢复Activity
- js模拟用户点击
- 天网管理系统(反序列化问题)
- TP3.2安装Memcached扩展-安装及遇到的问题-以完成
- 1028. 人口普查(20)
- 用VirtuaBox虚拟机安装centos7参考资料链接
- SpringMVC支持跨域访问的CORS配置
- Activity用户点击转屏后,恢复自由转屏
- Java面试题
- POJ-2430:Lazy Cows
- 使用maven无法查看jdk源码
- sql语句2
- Linux-虚拟网络设备-veth pair
- bzoj
- RHCE知识点总结1-3
- 关于Java多线程中的wait()、sleep()、notify()和notifyAll()的简单介绍和使用