当前位置:首页 » 安卓系统 » android旋转180度

android旋转180度

发布时间: 2022-07-19 16:54:22

Ⅰ 如何让Android屏幕只能上下翻转

让安卓屏幕只能上下翻转需要设置。

步骤为:

  1. 进入设置选项。

  2. 进入显示选项。

  3. 勾选“自动旋转屏幕”选项

  4. 在“旋转模式”中勾选“0度”和“180度”选项

这样就可以让安卓屏幕只能上下翻转了。

Ⅱ 如何让安卓手机判定屏幕旋转90度 how to make android mobile phone to determine

在介绍之前,我们需要先了解默认情况下android屏幕旋转的机制:
默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-> onCreate,这样会重新构造当前activity和界面布局,如果在Camera界面,则表现为卡顿或者黑屏一段时间。如果是在横竖屏UI设计方面,那么想很好地支持屏幕旋转,则建议在res中建立layout-land和layout-port两个文件夹,把横屏和竖屏的布局文件分别放入对应的layout文件夹中。
了解了这些以后,我们对android的屏幕旋转方法进行如下总结:
1. AndroidManifest.xml设置
如果单单想设置横屏或者竖屏,那么只需要添加横竖屏代码:
android:screenOrientation="landscape"横屏设置;
android:screenOrientation="portrait"竖屏设置;

这种方法的优点:即使屏幕旋转,Activity也不会重新onCreate。
缺点:屏幕只有一个方向。
2. 代码动态设置
如果你需要动态改变横竖屏设置,那么,只需要在代码中调用setRequestedOrientation()函数:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//横屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//竖屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
//默认设置

这种方法优点:可以随意动态设置,满足我们人为改变横竖屏的要求,同时满足横竖屏UI不同的设计需求;
缺点:如果改变设置,那么,Activity会被销毁,重新构建,即重新onCreate;
3. 重写onConfigurationChanged
如果你不希望旋转屏幕的时候Activity被不断的onCreate(这种情况往往会造成屏幕切换时的卡顿),那么,可以使用此方法:
首先,在AndroidMainfest.xml中添加configChanges:
<activity android:name=".Test"
android:configChanges="orientation|keyboard">
</activity>

注意,keyboardHidden表示键盘辅助功能隐藏,如果你的开发API等级等于或高于13,还需要设置screenSize,因为screenSize会在屏幕旋转时改变;
android:configChanges="keyboardHidden|orientation|screenSize"

然后,在Activity中重写onConfigurationChanged方法,这个方法将会在屏幕旋转变化时,进行监听处理:
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);
if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
// Nothing need to be done here
} else {
// Nothing need to be done here
}
}

这个方法的优点:我们可以随时监听屏幕旋转变化,并对应做出相应的操作;
缺点:它只能一次旋转90度,如果一下子旋转180度,onConfigurationChanged函数不会被调用。
4. 结合OrientationEventListener,自定义旋转监听设置
如果你想更加完美,更加完全的掌控监听屏幕旋转变化,比如,转屏时不想重新onCreate,尤其是在Camera界面,不想出现旋转preview时屏幕的卡顿、黑屏等问题,那么,可以尝试:

首先,创建OrientationEventListener对象:
private OrientationEventListener mOrientationListener;
// screen orientation listener
private boolean mScreenProtrait = true;
private boolean mCurrentOrient = false;

然后,自定义屏幕变化回调接口
abstract protected void OrientationChanged(int orientation);
//screen orientation change event

最后,自定义监听类
private final void () {
mOrientationListener = new OrientationEventListener(this) {
@Override
public void onOrientationChanged(int rotation) {
if (((rotation >= 0) && (rotation <= 45)) || (rotation >= 315)||((rotation>=135)&&(rotation<=225))) {//portrait
mCurrentOrient = true;
if(mCurrentOrient!=mScreenProtrait)
{
mScreenProtrait = mCurrentOrient;
OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Log.d(TAG, "Screen orientation changed from Landscape to Portrait!");
}
}
else if (((rotation > 45) && (rotation < 135))||((rotation>225)&&(rotation<315))) {//landscape
mCurrentOrient = false;
if(mCurrentOrient!=mScreenProtrait)
{
mScreenProtrait = mCurrentOrient;
OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Log.d(TAG, "Screen orientation changed from Portrait to Landscape!");
}
}
}
};
mOrientationListener.enable();
}

在onCreate()中调用:
();

这个方法的优点:你可以任意随时准确的监听屏幕旋转变化的状态,可以随时动态改变横竖屏状态;
注:对于Camera来说,你可以设置初始化为横屏或者竖屏,然后对外提供旋转监听,这样,既可以获得屏幕旋转状态,让你做出相应的操作,又不会出现重新onCreate当前Activity造成的卡顿与短暂的黑屏切换。

Ⅲ 如何使控件或者layout旋转180度

控件旋转:将android:rotation="180"写在layout下的.xml文件中对应的控件里

layout旋转:将android:screenOrientation="landscape"写在AndroidManifest.xml文件中对应的Activity里

Ⅳ android开发中如何旋转布局

楼主你好,这个可以通过动画来达到这个效果的,代码如下:
只要把您的layout对象传进去就行了
public void showAnimation(View mView)
{
final float centerX = mView.getWidth() / 2.0f;
final float centerY = mView.getHeight() / 2.0f;
//这个是设置需要旋转的角度,我设置的是180度
RotateAnimation rotateAnimation = new RotateAnimation(0, 180, centerX,
centerY);
//这个是设置通话时间的
rotateAnimation.setDuration(1000*3);
rotateAnimation.setFillAfter(true);
mView.startAnimation(rotateAnimation);
}

Ⅳ 有什么软件可以让安卓手机屏幕旋转180度的求大神啊●^●

你好,没有的。现在是有一些这样的手机,但是那是手机里自带的重力感应装置比较好,现在好多手机还没有这么好

-- 猴岛游戏论坛为您解答

Ⅵ 如何framework层任意设置Android屏幕的旋转方向

设备平放,屏幕朝正上方。以下四个常量分别代表:
private static final int ROTATION_0 = 0;//初始情况。这个时候设备是横屏还是竖屏与硬件设备安装时默认的显示方向有关。
private static final int ROTATION_90 = 1;//设置屏幕方向自动旋转后,右侧翻起侧立时,屏幕会旋转到这个方向。
private static final int ROTATION_270 = 2;//设置屏幕方向自动旋转后,左侧翻起度侧立时,屏幕会旋转到这个方向。
private static final int ROTATION_180 = 3;//设置屏幕方向自动旋转后,屏幕底部侧立时,屏幕会旋转到这个方向。

再看两个数组:
view plain
private static final int[][][] THRESHOLDS_WITH_180 = new int[][][] {
{{60, 165}, {165, 195}, {195, 300}},
{{0, 30}, {165, 195}, {195, 315}, {315, 360}},
{{0, 45}, {45, 165}, {165, 195}, {330, 360}},
{{0, 45}, {45, 135}, {225, 315}, {315, 360}},
};
private static final int[][] ROTATE_TO_WITH_180 = new int[][] {
{ROTATION_90, ROTATION_180, ROTATION_270},
{ROTATION_0, ROTATION_180, ROTATION_90, ROTATION_0},
{ROTATION_0, ROTATION_270, ROTATION_180, ROTATION_0},
{ROTATION_0, ROTATION_90, ROTATION_270, ROTATION_0},
};

当前屏幕旋转方向为ROTATION_0时,取int[][] threshold=THRESHOLDS_WITH_180[0];
当前屏幕旋转方向为ROTATION_90时,取int[][] threshold=THRESHOLDS_WITH_180[1];
当前屏幕旋转方向为ROTATION_270时,取int[][] threshold=THRESHOLDS_WITH_180[2];
当前屏幕旋转方向为ROTATION_180时,取int[][] threshold=THRESHOLDS_WITH_180[3];

其中,threshold中的每一个元素由两个值构成,用来表示一个范围。

WindowOrientationListener会注册一个Accelerator类型的SensorEventListener,当有新的SensorEvent产生时,调用filterOrientation产生一个int orientation值。这个值会在threshold的各个元素表示的范围中匹配,看会落在哪个范围。假设当前屏幕方向为ROTATION_0,那么threshold={{60, 165}, {165, 195}, {195, 300}},假设这个时候把屏幕左侧翻起90度。filterOrientation计算出的orientation值落在了第三个元素范围内,那么去ROTATE_TO_WITH_180中寻找与它对应的值,发现是ROTATION_270,那么就把当前屏幕旋转方向改变为270度。threshold的取值就变成了THRESHOLDS_WITH_180[2]。当把屏幕再次放平时,filterOrientation计算出的orientation值会落在第一个元素表示的范围内。去ROTATE_TO_WITH_180中寻找与它对应的值,发现是ROTATION_0,那么当前屏幕旋转方向被改变为0度。
还有一个变量比较重要,mAllow180Rotation,这个变量设置为false时,就不使用THRESHOLDS_WITH_180和ROTATE_TO_WITH_180这一对数组来做上面这些变的了,就使用THRESHOLDS和ROTATE_TO。
其实,我研究了半天也没有搞清filterOrientation的算法以及THRESHOLDS_WITH_180和THRESHOLDS这两个数组里面的每个数字代表的具体意义。最后只搞清了上面的这个流程,还有ROTATION_0, ROTATION_90, ROTATION_270, ROTATION_180这四个角度分别代表哪四个方向。但这足以应付我们要做的事情了。
比如,我想让屏幕最多只旋转90度和180度,不让它有旋转270度的机会。那就把ROTATE_TO_WITH_180里面的ROTATION_270全部变成90度。这样,应该旋转到270度时,就会旋转到90度了。如果不想让屏幕旋转,把所有值都改成ROTATION_0就可以了。

再深入挖掘一下这个话题
PhonwWindowManager是唯一实现WindowOrientationListener接口的类,它管理着整个设备界面的显示。当PhonwWindowManager通过WindowOrientationListener知道屏幕方向发生旋转时,会告诉WindowManagerService:
mWindowManager.setRotation(rotation, false, mFancyRotationAnimation);
而WindowManagerService得到这个通知后,会做两个比较重要的事情:
1、Surface.setOrientation(0, rotation, animFlags);
2、mRotationWatchers.get(i).onRotationChanged(rotation);
我们知道,每个Activity都有一个View树,每个View树都是绘画在一个Surface上面的。通过上面这两步,先把Surface给旋转了,再告诉Activity重新绘制View树,就完了整个屏幕的旋转。

Ⅶ 请问安卓系统玩游戏时怎样旋转屏幕我是用安卓模拟器在电脑模拟的!

android 屏幕旋转 屏是LANDSCAPE的,要让它默认显示为PORTRAIT. 1.kernel里要旋转FrameBuffer. 启动参数里加入fbcon=rotate:1 (0:正常屏; 1:顺时钟转90度; 2:转180度; 3:顺时钟转270度;) 最后生成的autoconf.h里有类似项: #define CONFIG_CMDLINE "console=ttySAC0,115200 fbcon=rotate:1" 此项的解析在$(kernel)/drivers/video/console/fbcon.c static int __init fb_console_setup(char *this_opt); 只是去初始化变量initial_rotation,然后initial_rotation会传递给其他需要的结构。 注意:参考$(kernel)/documentation/fb/fbcon.txt 2.android OS旋转屏幕 系统默认是针对竖屏的,而MID使用的是横屏,所以需要做一个转换的动作。 PORTRAIT LANDSCAPE <------屏幕显示方式 ROTATION_0 ROTATION_90 ROTATION_90 ROTATION_180 ROTATION_180 ROTATION_270 ROTATION_270 ROTATION_0 而source code里对ROTATION_180和ROTATION_270的处理比较少,只在sensor和KeyQueue部分,所以如果只是要让系统显示为竖屏,将android中的Surface.ROTATION_0改为Surface.ROTATION_90,而Surface.ROTATION_90改为Surface.ROTATION_0。 这样,启动后的屏幕就是竖屏的了。 改动后,启动时还是LANDSCAPE显示的,进入HOME也是,很快就会自动旋转到PORTRAIT模式,这是由于 $(cupcake)/frameworks/base/services/java/com/android/server/WindowManagerService.java 中enableScreenAfterBoot()->performEnableScreen()->mPolicy.enableScreenAfterBoot(), mPolicy为父类指针,可以指向 PhoneWindowManager或者MidWindowManager,由配置文件$(cupcake)/build/target/proct/core.mk中 PRODUCT_POLICY := android.policy_phone //PRODUCT_POLICY := android.policy_mid 来指定。 PhoneWindowManager::enableScreenAfterBoot()->updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE)->mWindowManager.setRotation()完成设置旋转并清除LOGO. 3.启动过程中竖屏 启动过程中,默认是按照屏的width和height显示的,不会旋转,要使它显示logo时就是竖屏的,也就是旋转90度,需要做如下工作: $(cupcake)/frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp status_t SurfaceFlinger::readyToRun()中 //const uint32_t w = hw.getWidth(); //const uint32_t h = hw.getHeight(); //swap w&h for portrait display in landscape panel. jeff. const uint32_t h = hw.getWidth(); const uint32_t w = hw.getHeight(); 交换一下width和height,这样后面用OpenGL创建的ViewPort形状就是竖的了。修改后面的函数参数也可以,不过太多了,交换一下省事。但是怎么让这个竖的viewport旋转90度呢?这里就要用到GraphicPlane::mGlobalTransform这个Transform了。它指示当前最终要旋转的结果。 所以要在创建GraphicPlane时初始化mGlobalTransform为旋转90度。 GraphicPlane::GraphicPlane() : mHw(0) { //add by jeff. for default rotate angel 90 mOrientationTransform.reset(); mOrientation = ISurfaceComposer::eOrientation90; mGlobalTransform = mOrientationTransform * mTransform; } 此段从status_t GraphicPlane::setOrientation(int orientation)复制过来,注意修改mGlobalTransform: if (orientation == ISurfaceComposer::eOrientation90) { //ISurfaceComposer::eOrientationDefault //jeff // make sure the default orientation is optimal mOrientationTransform.reset(); mOrientation = orientation; //mGlobalTransform = mTransform; mGlobalTransform = mOrientationTransform * mTransform; //jeff return NO_ERROR; } 注意mOrientationTransform.reset();要修改为默认旋转90度。参照status_t GraphicPlane::orientationToTransfrom 中的设置,修改为: void Transform::reset() { mTransform.reset(); mType = 0; set(0,-1,1,0); //jeff set(800,0); } 参考: status_t GraphicPlane::orientationToTransfrom( int orientation, int w, int h, Transform* tr) { float a, b, c, d, x, y; switch (orientation) { case ISurfaceComposer::eOrientationDefault: a=1; b=0; c=0; d=1; x=0; y=0; break; case ISurfaceComposer::eOrientation90: a=0; b=-1; c=1; d=0; x=w; y=0; break; case ISurfaceComposer::eOrientation180: a=-1; b=0; c=0; d=-1; x=w; y=h; break; case ISurfaceComposer::eOrientation270: a=0; b=1; c=-1; d=0; x=0; y=h; break; default: return BAD_VALUE; } tr->set(a, b, c, d); tr->set(x, y); return NO_ERROR; } 修改之后,默认就是竖屏(旋转90度)显示了。

热点内容
如何开启电脑服务器无法上网 发布:2025-01-23 17:37:06 浏览:391
安卓手机锁了怎么开 发布:2025-01-23 17:21:18 浏览:137
经济学算法 发布:2025-01-23 17:13:46 浏览:421
如何和软件联系服务器 发布:2025-01-23 17:13:00 浏览:800
javacrc16算法 发布:2025-01-23 17:11:31 浏览:225
编程加图片 发布:2025-01-23 17:10:33 浏览:567
中国风网站源码 发布:2025-01-23 17:05:56 浏览:680
pythonfilter用法 发布:2025-01-23 17:04:26 浏览:569
java转number 发布:2025-01-23 16:58:11 浏览:477
解压的英语作文 发布:2025-01-23 16:45:05 浏览:970