启动应用显示弹窗动画,倒计时后自动消失
2017-01-09 16:20
881 查看
项目里要求做一个启动应用时显示的弹窗动画,效果图如下
黑色矩形方框即是tvRight,动画显示的锚点。
粉色星星为textview,下面的动画要设置到textview上。左右摆动时要像第二排的效果,textview可以完整的显示;如果动画设置不对,则摆动过程中会被背景图掩盖,显示效果如第三排所示。
思路有两个:1.dialog2.popupWindow
dialog实现:
自定义一个Dia_Anim类。上代码。
对话框的布局文件dia_anim.xml
在Activity或者fragment里调用对话框
难点:动画效果一定要设定给textView,dialog的背景设为透明,宽度定义为match_parent,背景图片也要设置给textView。这样动画就是文本框在对话框上左右晃动。
2.popupWindow实现
自定义popupWindow的布局也使用dia_anim.xml
在activity或fragment里调用时要用异步调用。否则会报空。
tvRight是动画显示的锚点。
总结:使用popupwindow不需要计算动画显示的位置,只需设置动画所附的控件view;使用dialog需要计算动画显示的精确位置。
使用popupwindow需要异步显示。
黑色矩形方框即是tvRight,动画显示的锚点。
粉色星星为textview,下面的动画要设置到textview上。左右摆动时要像第二排的效果,textview可以完整的显示;如果动画设置不对,则摆动过程中会被背景图掩盖,显示效果如第三排所示。
思路有两个:1.dialog2.popupWindow
dialog实现:
自定义一个Dia_Anim类。上代码。
public class Dia_Anim{ public View mContentView; protected Context mContext; private Dialog dialog; private TextView tvDiaToast; // 倒计时器,用来设置动画显示时间 private CountDownTimer cdt; public Dia_Anim(Context context) { mContentView = LayoutInflater.from(context).inflate(getLayoutId(), null); dialog = new Dialog(context, R.style.ActionSheetDialogStyle); dialog.setContentView(mContentView); } //在这里传入自定义的布局 protected int getLayoutId() { return R.layout.dia_anim; } //定义一个view,定位在页面显示的位置,到达目标位置后左右微摆动,持续3秒后消失 public Dialog getDialog(){ WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); //背景透明度 lp.dimAmount = 0.0f; //lp.x和lp.y是dialog定位坐标 WindowManager wm =(WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); int height = wm.getDefaultDisplay().getHeight(); lp.x= width/2; lp.y= height/2; lp.width = width;//定义对话框的宽度为屏幕宽度 //对话框的透明度 lp.alpha = 0.9f; dialog.getWindow().setAttributes(lp); // 左右微摆动动画 TranslateAnimation animation; //左右摇摆就是向一个方向移动,然后设置反方向的属性,再设置重复次数 animation = new TranslateAnimation(-15,15,0,0); animation.setDuration(500); animation.setRepeatCount(5); animation.setRepeatMode(Animation.REVERSE); //注意动画是定义给textView的。如果定义给mContentView会出现text左右摆动时被遮盖的效果。 dialog.findViewById(R.id.tv_dia_toast).startAnimation(animation); ((TextView)mContentView.findViewById(R.id.tv_dia_toast)).setTextSize(12); cdt = new CountDownTimer(3000,1000) { @Override public void onTick(long millisUntilFinished) { } @Override public void onFinish() { //倒计时3秒结束时对话框消失 dialog.dismiss(); } }; cdt.start(); return dialog; } }
对话框的布局文件dia_anim.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/amin" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:background="@drawable/bg_dia_toast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:id="@+id/tv_dia_toast" android:text="@string/dia_qrcode_toast" android:textColor="@color/white" android:paddingTop="@dimen/dia_qrcode_margin_top" android:paddingBottom="@dimen/dia_qrcode_margin_bottom" android:paddingLeft="@dimen/dia_qrcode_margin_left" android:paddingRight="@dimen/dia_qrcode_margin_left" android:layout_marginRight="@dimen/dia_qrcode_margin_right"/> </RelativeLayout>
在Activity或者fragment里调用对话框
Dia_Anim dia_anim = new Dia_Anim(mContext);//需要传入一个context dia_anim.getDialog().show();
难点:动画效果一定要设定给textView,dialog的背景设为透明,宽度定义为match_parent,背景图片也要设置给textView。这样动画就是文本框在对话框上左右晃动。
2.popupWindow实现
public class POP_Anim extends PopupWindow{ //背景activity private Activity context; //布局 private View mContentView; public POP_Anim(Activity context) { if(null!=context){ this.context = context; LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mContentView = inflater.inflate(R.layout.dia_anim, null); int w = context.getWindowManager().getDefaultDisplay().getWidth(); // 设置PopupWindow的View this.setContentView(mContentView); // 设置PopupWindow弹出窗体的宽 this.setWidth(w / 2 + 50); // 设置PopupWindow弹出窗体的高 this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); } } public void showPopupWindow(View parent){ //左右微摆动动画 TranslateAnimation animation; //左右摇摆就是向一个方向移动,然后设置反方向的属性,再设置重复次数 animation = new TranslateAnimation(-15,15,0,0); //animation.setInterpolator(new OvershootInterpolator()); animation.setDuration(500); animation.setRepeatCount(5); animation.setRepeatMode(Animation.REVERSE); mContentView.findViewById(R.id.tv_dia_toast).startAnimation(animation); CountDownTimer cdt = new CountDownTimer(3000,1000) { @Override public void onTick(long millisUntilFinished) { } @Override public void onFinish() { dismiss(); } }; cdt.start(); if (!this.isShowing()) { // 以下拉方式显示popupwindow this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18); } else { this.dismiss(); } } }
自定义popupWindow的布局也使用dia_anim.xml
在activity或fragment里调用时要用异步调用。否则会报空。
tvRight.post(new Runnable() { @Override public void run() { POP_Anim popAnim = new POP_Anim(getActivity()); popAnim.showPopupWindow(tvRight); } });
tvRight是动画显示的锚点。
总结:使用popupwindow不需要计算动画显示的位置,只需设置动画所附的控件view;使用dialog需要计算动画显示的精确位置。
使用popupwindow需要异步显示。
相关文章推荐
- eclipse启动动画自动消失并且没有反应开启失败的解决方法
- 类似QQ导航底部显示提示弹窗,能自动消失
- iOS9 添加定位功能后,启动应用没有出现允许开启定位权限的通知,或者出现权限通知后,自动消失的解决办法 - 家柱
- 还有如此实现方法,没试用过,mouseEntered一个按钮的时候如何让他自动显示按钮的注释信息在一个小的注释框中??鼠标移走又小的注释框又自动消失??
- [转]C# 在窗口右下角弹出广告的代码,渐变显示与自动消失
- 在ASP.NET 4中如何自动启动Web应用?
- 3dmax不能启动(启动到一半就自动消失)
- 在MIDP2.0中使用Push注册机制,允许应用被自动启动的方法
- toolTip自动消失之后不再显示的解决方法
- Android 开机自动启动应用
- 定时自动启动外部应用软件并限时关闭此软件程序
- Android中帧动画在Activity启动时自动运行的几种方式
- FAQ:启动IE时自动显示工具条
- brew应用的开机自动启动
- OWA 只显示新邮件,已读邮件自动消失
- 艾伟_转载:VS 2010 和 .NET 4.0 系列之《自动启动ASP.NET应用》篇
- 点击文本框内容消失,移开内容自动显示(两种方法)(原创)
- 解决快速启动中显示桌面消失问题
- 巧让Word启动时自动显示打开窗口
- 系统托盘图标显示菜单(TrackPopupMenu)无法自动消失解决方法