activity-Android Activity切换界面抖动

问题描述

Android Activity切换界面抖动

我从一个FullScreen的Activity A跳到另一个不是FullScreen的Activity B,界面会抖动一下
,就是B刚进入的时候貌似也是全屏,然后状态出来,B的布局就被向下挤了,看上去就有抖动,这个怎么解决

解决方案

 其原理很简单,就是使用动画让组件来回摆动,代码如下:

MainActivity:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.home.animwindow; 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView; 

public class MainActivity extends Activity {
    private EditText edit;
    private Button btn;
    private ImageView image; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = (EditText) findViewById(R.id.edit);
        image = (ImageView) findViewById(R.id.main_iv);
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Animation animation = AnimationUtils.loadAnimation(
                        MainActivity.this, R.anim.myanim);
                edit.startAnimation(animation);
                image.startAnimation(animation);
            }
        });
    }
}
布局:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" > 

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="点击按钮、此窗口抖动" /> 

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮" /> 

    <ImageView
        android:id="@+id/main_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" /> 

</LinearLayout>
动画myanim:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/cycle" > 

    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="-10"
        android:toYDelta="-10" />
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:startOffset="300"
        android:toXDelta="10"
        android:toYDelta="-10" />
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:startOffset="600"
        android:toXDelta="-10"
        android:toYDelta="10" />
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:startOffset="900"
        android:toXDelta="10"
        android:toYDelta="10" /> 

</set>
cycle:

?
1
2
3
<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:cycles="5" />

解决方案二:

 其原理很简单,就是使用动画让组件来回摆动,代码如下:

MainActivity:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.home.animwindow; 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView; 

public class MainActivity extends Activity {
    private EditText edit;
    private Button btn;
    private ImageView image; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = (EditText) findViewById(R.id.edit);
        image = (ImageView) findViewById(R.id.main_iv);
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Animation animation = AnimationUtils.loadAnimation(
                        MainActivity.this, R.anim.myanim);
                edit.startAnimation(animation);
                image.startAnimation(animation);
            }
        });
    }
}
布局:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" > 

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="点击按钮、此窗口抖动" /> 

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮" /> 

    <ImageView
        android:id="@+id/main_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" /> 

</LinearLayout>
动画myanim:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/cycle" > 

    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="-10"
        android:toYDelta="-10" />
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:startOffset="300"
        android:toXDelta="10"
        android:toYDelta="-10" />
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:startOffset="600"
        android:toXDelta="-10"
        android:toYDelta="10" />
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:startOffset="900"
        android:toXDelta="10"
        android:toYDelta="10" /> 

</set>
cycle:

?
1
2
3
<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:cycles="5" />

解决方案三:

全屏和非全屏高度不一样,切换可能会造成视觉差异,可以做个页面切换动画,透明度变化来减少这种视觉差

解决方案四:

不全屏的activity就用dialog代替吧

解决方案五:

app的theme可能是全屏

解决方案六:

Acitivity的全屏是在每个Acitivity的初始化时设置的,按理说不应该出现这样的问题。建议你先试试都是全屏的切换。

时间: 2024-11-17 09:21:19

activity-Android Activity切换界面抖动的相关文章

android activity向dialog返回值?谢谢

问题描述 android activity向dialog返回值?谢谢 dialog转到activity,且activity完成任务后向dialog返回值?谢谢 解决方案 http://www.shangxueba.com/jingyan/1867886.html 解决方案二: Android有返回值的ActivityAndroid Activity调用Dialog后的返回值方法android Dialog给Activity 传参 解决方案三: 使用接口回调吧...

【ANDROID游戏开发之五】游戏注册界面DEMO-实现两个ACTIVITY之间的切换与数据交互!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/301.html ----------------------- 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读:

Android输入法与表情面板切换时的界面抖动问题解决方法_Android

昨天琢磨了下Android的输入法弹出模式,突然发现利用动态切换输入法的弹出模式可以解决输入法抖动的问题.具体是怎样的抖动呢?我们先看微博的反面教材. [具体表现为:表情面板与输入法面板高度不一致,从而导致弹出输入法(layout被挤压)时,同时又需要隐藏表情面板(layout被拉升),最终让界面产生了高度差抖动,所以在切换时明显会有不大好的抖动体验)] 使用了解决抖动的解决方案后,效果如下: [这样的方案明显比微博的切换更平滑] 老样子,先说思路.主要我们要用到两个输入法弹出模式,分别是:ad

详解Android Activity之间切换传递数据的方法_Android

前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是intent的基础用法. 先上个图(界面依旧没优化,难看就难看吧): 起始activity,打开图片选择窗口,随便选择一张图片 下面是跳转到裁剪界面 按下crop按钮,退出activity,回到原来界面,并显示裁剪后的图 流程就是这样,也算模拟了系统裁剪功能的整体过程.下面就是实现功能的关键代码和说明了.

Android Activity 横竖屏切换的生命周期_Android

前言 在开发中常要处理横竖屏切换,怎么处理先看生命周期 申明 Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是Activity 横竖屏切换的生命周期的一部分,这两个函数如下 onSaveInstanceState(Bundle outState) :Activity 即将销毁时保存数据 onRestoreInstanceState(Bundle savedInstanceState) : Activity 重建或者恢复时候取出数据 横竖屏切换生命周期 1.启动程

android中Activity横竖屏切换的那些事

讲解之前需要说明的是 旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们旋转屏幕 手动设置屏幕:我们自己去调用Activity的 setRequestedOrientation 方法. 设置屏幕的方向 简介 值 描述 unspecified 默认值.系统自动选择屏幕方向 behind 跟activity堆栈中的下面一个activity的方向一致 landscape 横屏方向,显示的宽比高长 portrait 竖屏方向,显示的高比宽长 sensor 由设备的物理方向传感器决定,如果用户旋转设备,这屏

详解Android Activity之间切换传递数据的方法

前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是intent的基础用法. 先上个图(界面依旧没优化,难看就难看吧): 起始activity,打开图片选择窗口,随便选择一张图片 下面是跳转到裁剪界面 按下crop按钮,退出activity,回到原来界面,并显示裁剪后的图 流程就是这样,也算模拟了系统裁剪功能的整体过程.下面就是实现功能的关键代码和说明了.

Android Activity切换(跳转)时出现黑屏的解决方法 分享_Android

  在两个Activity跳转时,由于第二个Activity在启动时加载了较多数据,就会在启动之前出现一个短暂的黑屏时间,解决这个问题比较简单的处理方法是将第二个Activity的主题设置成透明的,这样在启动第二个Activity时的黑屏就变成了显示第一个Activity界面.这个分两步完成:第一步:xxx/res/values/styles.xml中加入自定义Activity的Theme,如下所示: [html]  <style name="Transparent" paren

Android利用Theme自定义Activity间的切换动画_Android

大多Android系统默认Activity间的动画切换效果为,右边滑入,左边滑出:有时候我们的需求可能是要求所有Activity的切换为淡入淡出的效果,这时候就可能需要改变一下默认的切换风格. 下面开始实现: 首先在res文件夹下建立anim文件夹,然后在里面建立fade_in.xml和fade_out.xml两个动画资源 fade_in.xml <?xml version="1.0" encoding="utf-8"?> <alpha xmlns