1.今天为了把一个activity以dialog的形式显示,而且实现从开始的时候从底部往上弹出,结束的时候,从上往下消失,做了如下的工作。

1)如果把一个activity以dialog的形式显示?

这个只需要设置theme的样式为*.dialog就行了,如下 在AndroidManifest.xml设置属性

        <activity android:name=".ui.EditSlideDurationActivity"
android:label="@string/change_duration_activity"
android:theme="@style/Mms.Theme.Edit.Dialog">
</activity>
Mms.Theme.Edit.Dialog   是在funui_style.xml中定义的一个style
    <style name="Mms.Theme.Edit.Dialog" parent="@android:style/Theme.Funui.Dialog">
</style>

2) 这个就能实现它以dialog的样式实现了,但是这时候你会发现,它是显示在屏幕的中央,而且是一个小方块,并不会充满这个屏幕的宽度,这时候还需要进行如下的操作,就是在这个activity中设置显示的位置,而在这个activity的xml中设置宽度

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="360dp"
android:layout_height="165dp"
android:orientation="vertical" >

其实,还有两外一个方法,就是在代码里面进行设定,如下

import android.view.Window;
import android.view.WindowManager;
//在oncreate里添加如下代码
Window w = getWindow();
WindowManager.LayoutParams attrs = w.getAttributes();
attrs.width = WindowManager.LayoutParams.MATCH_PARENT;
w.setAttributes(attrs);

注意:上面的代码,必须用在dialog 创建完成以后,如下

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"StorageDefaultPathDialog onCreate()");
mSDCardStateFilter = new IntentFilter(SD_ACTION);
mSDCardStateFilter.addDataScheme("file");
mReceiver = mSDStateReceiver;
mInsertOtg = getIntent().getBooleanExtra(INSERT_OTG, false);
//放在这里是没有效果的
createDialog();
/* Vanzo:zhangshuli on: Thu, 02 Jul 2015 16:11:42 +0800
*/
Window w = getWindow();
WindowManager.LayoutParams attrs = w.getAttributes();
attrs.width = WindowManager.LayoutParams.MATCH_PARENT;
w.setAttributes(attrs);
// End of Vanzo: zhangshuli
} private void createDialog() {
final AlertController.AlertParams p = mAlertParams;
p.mTitle = mInsertOtg ? getString(com.mediatek.internal.R.string.usb_storage_ready_title) :
getString(com.mediatek.internal.R.string.sdcard_ready_title);
p.mView = createView();
p.mViewSpacingSpecified=true;
p.mViewSpacingLeft=15;
p.mViewSpacingRight=15;
p.mViewSpacingTop=5;
p.mViewSpacingBottom=5;
p.mPositiveButtonText = getString(android.R.string.yes);
p.mPositiveButtonListener = this;
p.mNegativeButtonText = getString(android.R.string.no);
p.mNegativeButtonListener = this;
setupAlert();
}

另外,在代码中添加一个位置显示设置

import android.view.Gravity;

    @Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.edit_slide_duration);
/* Vanzo:zhangshuli on: Mon, 16 Mar 2015 16:29:50 +0000
*/
getWindow().setGravity(Gravity.BOTTOM);
// End of Vanzo: zhangshuli
}

这时候确实是能够实现activity以充满屏幕宽度和在屏幕底部的方式存在。

3)动画效果添加

最开始是看得网上的方法,如下

<style name="Mms.Theme.Edit.Dialog" parent="@android:style/Theme.Funui.Dialog">
<item name="android:windowAnimationStyle">@style/Animation</item>
</style> <style name="Animation">
<item name="windowEnterAnimation">@anim/push_bottom_in</item>
<item name="windowExitAnimation">@anim/push_bottom_out</item>
</style>

这个方法看起来似乎有点效果,但是,你会发现,它其实是在动画退出的时候闪烁一下。后来想着是不是因为在代码中设置才可以消除,因为感觉可能是跟activity转变为dialog以后显示有冲突呢

代码中设置的话,需要用到以下方法

overridePendingTransition(0, R.anim.push_bottom_out);

第一个参数:是即将出现的那个activity的动画效果
第二个参数:是即将消息的activity的动画效果

代码如下,也就是在启动它的地方添加动画,注意一定要在启动以后添加动画

 builder.setSingleChoiceItems(arrayAdapter, checkedItem,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if ((which >= 0) && (which < NUM_DIRECT_DURATIONS)) {
mSlideshowEditor.changeDuration(
mPosition, (which + 1) * 1000);
} else {
Intent intent = new Intent(SlideEditorActivity.this,
EditSlideDurationActivity.class);
intent.putExtra(EditSlideDurationActivity.SLIDE_INDEX, mPosition);
intent.putExtra(EditSlideDurationActivity.SLIDE_TOTAL,
mSlideshowModel.size());
intent.putExtra(EditSlideDurationActivity.SLIDE_DUR, dur); // in seconds
startActivityForResult(intent, REQUEST_CODE_CHANGE_DURATION);
/* Vanzo:zhangshuli on: Tue, 17 Mar 2015 11:00:57 +0000
*/
overridePendingTransition(R.anim.push_bottom_in, 0)
// End of Vanzo: zhangshuli
}

结果发现还是没有效果

后来又在网上找了如下的方法,

    <style name="Mms.Theme.Edit.Dialog" parent="@android:style/Theme.Funui.Dialog">
<item name="android:windowAnimationStyle">@style/AnimBottom</item>
</style>
<style name="AnimBottom" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/push_bottom_in</item>
<item name="android:activityOpenExitAnimation">@anim/push_bottom_in</item>
<item name="android:activityCloseExitAnimation">@anim/push_bottom_out</item>
<item name="android:activityCloseEnterAnimation">@anim/push_bottom_out</item>
</style>
</resources>

我们可以发现这个属性引用名虽然跟前面的一样,但是里面的属性却不同。然后我就用了这个方法,这个方法其实是可以的。但是,它设定的是启动activity跟被启动activity的关系,所以你设定了它以后,所有activity

的启动方式都变了,这个方法失败了。

最后,终于找到了一个方法,如下

如下

/* Vanzo:zhangshuli on: Mon, 16 Mar 2015 20:42:26 +0000
*/
//这个是没有什么效果的
@Override
protected void onDestroy() {
super.onDestroy();
finish();
overridePendingTransition(0, R.anim.push_bottom_out);
android.util.Log.e("zhangshuli", "ondestroy"); }
//这个是关键
@Override
public void finish() {
super.finish();
overridePendingTransition(0, R.anim.push_bottom_out);
android.util.Log.e("zhangshuli", "finish");
}
// End of Vanzo: zhangshuli

也就是说,要想这个overridePendingTransition(0, R.anim.push_bottom_out); 有效果,它必须放在startactivity() 或者finish()的后面,而且只生效一次

动画如下

<!--in.xml-->

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > <translate
android:duration="3000"
android:fromYDelta="100%p"
android:toYDelta="0"
/> </set> <!--out.xml-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > <translate
android:duration="3000"
android:fromYDelta="0"
android:toYDelta="100%p"
/> </set>

这样就实现了activity以dialog的样式显示,而且从底部弹出

activity-启动动画的设定(下面弹出出现,弹入下面消失)的更多相关文章

  1. 打开Activity时,不自动显示(弹出)虚拟键盘

    打开Activity时,不自动显示(弹出)虚拟键盘 在AndroidManifest.xml文件中<activity>标签中添加属性 android:windowSoftInputMode ...

  2. PyQt(Python+Qt)学习随笔:设定toolButton弹出菜单的方法

    在Qt Designer中toolButton可以通过popupMode设定菜单弹出的模式,但并不能在Qt Designer中指定toolButton的弹出菜单,toolButton只能通过代码来指定 ...

  3. C#使用Process启动exe程序,不弹出控制台窗口的方法

    背景:使用wkhtmltopdf工具将html转换成pdf时,这个工具在进行转换时会弹出命令行窗口显示转换过程,但是在项目运行时弹出服务器突然弹出控制台窗口会很奇怪,尤其是当转换多个时.解决这个问题 ...

  4. Bootstrap告警框(alert)实现弹出效果和短暂消失后上浮消失

    最近用到bootstrap的告警框时发现只有html的说明,就自己写了一个弹出告警框和弹出短暂显示后上浮消失的告警框. 直接上JS代码了,可以copy过去直接用(使用bootstrap的UI框架的情况 ...

  5. Android 全屏Activity以透明的对话框形式弹出

    1. styles.xml <style name="transcutestyle" parent="@android:style/Theme.DeviceDefa ...

  6. Android开发之使一打开activity等界面Edittext获取焦点,弹出软键盘java代码实现

    // 获取编辑框焦点 editText.setFocusable(true); //打开软键盘 IInputMethodManager imm = (InputMethodManager)getSys ...

  7. JS_点击事件_弹出窗口_自动消失

    <!doctype html> <html> <head> <meta charset="utf-8"/> <title> ...

  8. Android设置Activity启动和退出时的动画

    业务开发时遇到的一个小特技,要求实现Activity启动时自下向上弹出,退出时自上向下退出. 此处不关注启动和退出时其他Activity的动画效果,实现方法有两种: 1.代码方式,通过Activity ...

  9. android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果

    需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果,  总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...

  10. android标题栏下面弹出提示框(一) TextView实现,带动画效果

    产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现 ...

随机推荐

  1. wpf convert png to xaml

    原文:wpf convert png to xaml 把png图片转化成xaml资源 <ResourceDictionary xmlns="http://schemas.microso ...

  2. Eclipse反编译插件 Enhanced Class Decompiler

    因为jar包中的源码都是经过反编译的,所以需要安装插件才能查看到源码,此处介绍的是 Enhanced Class Decompiler 插件. 打开Eclipse,Help --> Eclips ...

  3. sql server 2000 自动收缩数据库大小

    转载.......http://mars968.blog.163.com/blog/static/7400033200941642356258/ SQLServer2000压缩日志及数据库文件     ...

  4. CODEVS——T 2833 奇怪的梦境

    http://codevs.cn/problem/2833/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descr ...

  5. HBase快照、Snapshots 淘宝快照

    淘宝在2011年之前所有的后端持久化存储基本上与我们所认知的意义,  大量存于 mysql .少量 oracle mongdb 等,使用mysql 的原因相信各位也很熟悉了.  开源.社区庞大.解决方 ...

  6. Qt 5.3 下OpenCV 2.4.11 开发(0)图像处理基本概念

    1.普通情况下的RGB彩色图像:它的每一个像素点都是由三个通道组成,即红色(R).绿色(G)和蓝色(B).8位三通道彩色图像就是每一个像素中每一个通道的取值范围都是 0~255(即二进制下的8位数), ...

  7. 基于BP神经网络的简单字符识别算法自小结(C语言版)

    本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前面的闲话: 自我感觉自己应该不是一个非常 ...

  8. 关于android studio几种常见的错误解决

    我也是从ec转到as的,没办法,大势所趋嘛,然而,在使用as的过程中遇到了非常多匪夷所思的错误,如今就说一下今天我遇到的这个错误. 美工妹子给了我一张图片,用来当做button的背景图,当然,这个图也 ...

  9. scikit-learn 为机器学习

    如何使用 scikit-learn 为机器学习准备文本数据   欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被 ...

  10. 圈复杂度(Cyclomatic Complexity)

    圈复杂度(Cyclomatic Complexity)是很常用的一种度量软件代码复杂程度的标准.这里所指的“代码复杂程度”并非软件内在业务逻辑的复杂程度,而是指代码的实现方式的 复杂程度.说起来有点绕 ...