android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果
需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果, 总在找事情做的产品经理又提出了奇葩的需求。之前在通知栏显示的提示需要在标题栏上面弹出提示框,然后用动画去显示隐藏,并且在大部分Activity上都要显示。
问题1:用上次那个TextView隐藏在布局文件中肯定不行了,不然每个activity都要修改,于是决定用PopupWindow,只要显示在activity的根布局上就行.
问题2:需要把显示PopupWindow的方法抽出来作为一个公共方法,我这边是放到一个工具类里面,传入当前activity.
问题3:从顶部移动多少距离呢?因为我们这个提示框跟标题栏的高度不一样的,于是我就计算提示框图片的高度,作为移动的高度.
效果图如下:
PopupWindowTest.java 程序的入口,调用显示popupwindow的工具类
/**
* 显示PopupWindow的activity
* @author ansen
* @create time 2015-10-27
*/
public class PopupWindowTest extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_popupwindow_test); findViewById(R.id.btn_show_tip).setOnClickListener(onClickListener);
} private OnClickListener onClickListener=new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_show_tip://显示提示.
Util util=new Util();
util.showTips(PopupWindowTest.this);
break;
}
}
};
}
Util.java 封装了显示popupwindow的方法,并且增加了动画结束回调接口,动画结束隐藏popupwindow。
/**
* 封装了显示Popupwindow的方法.
* @author ansen
* @create time 2015-10-27
*/
public class Util implements AnimationEndCallback{
private PopupWindow reportVideoPopwindow; public void showTips(Activity activity){
int translateHeight=(int) dip2px(activity,52);
View parent = ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
View popView = LayoutInflater.from(activity).inflate(R.layout.activity_popupwindow_tips, null);
int statusBar=getStatusBarHeight(activity);
reportVideoPopwindow = new PopupWindow(popView,LayoutParams.MATCH_PARENT,translateHeight*2);
reportVideoPopwindow.showAtLocation(parent,Gravity.TOP, 0, 0);
TipRelativeLayout tvTips=(TipRelativeLayout) popView.findViewById(R.id.rl_tips);
tvTips.setTitleHeight(statusBar);//移动状态栏的高度
tvTips.setAnimationEnd(this);//设置动画结束监听函数
tvTips.showTips();//显示提示RelativeLayout,移动动画.
} public int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
} private float dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
float result = dpValue * scale + 0.5f;
return result;
} @Override
public void onAnimationEnd() {
reportVideoPopwindow.dismiss();//动画结束,隐藏popupwindow
}
}
TipRelativeLayout.java 这个类也没啥好说的,就在原来的TipTextView基础上增加了一个动画结束回调接口。
/**
* 自定义RelativeLayout 显示提示信息,显示时有动画效果(从上面弹出,然后改变透明度慢慢隐藏)
* @author ansen
* @create time 2015-10-20
*/
public class TipRelativeLayout extends RelativeLayout{
private static final int START_TIME=400;//动画显示时间
private static final int END_TIME=400;//动画移出时间
private static final int SHOW_TIME=1000;//动画显示时间 private AnimationEndCallback animationEnd;
private int titleHeight=100;//标题栏默认的高度设置成100 public TipRelativeLayout(Context context) {
super(context);
} public TipRelativeLayout(Context context, AttributeSet paramAttributeSet) {
super(context, paramAttributeSet);
} public TipRelativeLayout(Context context, AttributeSet paramAttributeSet,int paramInt) {
super(context, paramAttributeSet, paramInt);
} public void showTips(){
setVisibility(View.VISIBLE); //向下移动动画
TranslateAnimation downTranslateAnimation=new TranslateAnimation(0,0,0,titleHeight);
downTranslateAnimation.setDuration(START_TIME);
downTranslateAnimation.setFillAfter(true); startAnimation(downTranslateAnimation); //动画监听
downTranslateAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation){//向下移动动画结束
topTranslateAnimation();
}
@Override
public void onAnimationRepeat(Animation animation) {}
});
} private void topTranslateAnimation(){
new Handler().postDelayed(new Runnable() {//延时1秒之后再向上移动
@Override
public void run(){ //向上移动动画
TranslateAnimation topTranslateAnimation=new TranslateAnimation(0,0,titleHeight,0);
topTranslateAnimation.setDuration(END_TIME);
topTranslateAnimation.setFillAfter(true); //改变透明度
AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
alphaAnimation.setDuration(END_TIME); //两个动画添加到动画集合中
AnimationSet animationSet=new AnimationSet(true);
animationSet.addAnimation(topTranslateAnimation);
animationSet.addAnimation(alphaAnimation); startAnimation(animationSet);//开启动画 animationSet.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation){//动画结束隐藏提示的TextView
setVisibility(View.GONE);
if(animationEnd!=null){
animationEnd.onAnimationEnd();
}
}
});
}
},SHOW_TIME);
} /**
* 设置标题栏高度
* @param titleHeight
*/
public void setTitleHeight(int titleHeight) {
this.titleHeight = titleHeight;
} public void setAnimationEnd(AnimationEndCallback animationEnd) {
this.animationEnd = animationEnd;
} /**
* 动画结束监听函数
* @author apple
*/
public interface AnimationEndCallback{
public void onAnimationEnd();
}
}
其他的布局文件什么的我就不贴出来了,有需要的自己可以去下载源码.推荐下自己创建的android QQ群:202928390
欢迎大家的加入.
下载第二版 修正了某些手机状态栏的高度不对出现的bug.
android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果的更多相关文章
- android标题栏下面弹出提示框(一) TextView实现,带动画效果
产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现 ...
- android常用的弹出提示框
我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等 ...
- [转] 在Asp.net前台和后台弹出提示框
一.在前台弹出提示框 1.点击"A"标记或者"控件按钮"弹出提示框 <asp:LinkButton ID="lbtnDel" runa ...
- SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框
1.Invoke和InvokeSelf [c-sharp] view plaincopy public partial class CreateJSDemo : UserControl { publi ...
- odoo13之右上角弹出提示框
前言 在odoo中已经提供好了右上角弹出提示框的接口,我们只需要调用即可: 而提示框的实现又分为前端js实现和后段函数实现,前后端实现的效果相同. 实现效果图 前端实现提示框 在前端中显示提示框最常用 ...
- PHP弹出提示框并跳转到新页面即重定向到新页面
本文为大家介绍下使用PHP弹出提示框并跳转到新页面,也就是大家所认为的重定向,下面的示例大家可以参考下 这两天写一个demo,需要用到提示并跳转,主要页面要求不高,觉得没必要使用AJAX,JS等, ...
- 基于Jquery 简单实用的弹出提示框
基于Jquery 简单实用的弹出提示框 引言: 原生的 alert 样子看起来很粗暴,网上也有一大堆相关的插件,但是基本上都是大而全,仅仅几句话可以实现的东西,可能要引入好几十k的文件,所以话了点时间 ...
- iOS bug 之 H5 页面没有弹出提示框
描述:在安卓上有提示框,但是在iOS上没有提示框. step 1: 失误,是我没有在正确的位置设置网址. step 2: 修改之后,测试页能弹出提示框,但是正式的页面没有提示框. step 3: 我输 ...
- C#自动关闭弹出提示框
自动关闭弹出提示框(用一个小窗体显示提示信息):例如在一个form窗体中弹出自动关闭的提示框1.首先创建一个弹出提示信息的窗体 AutoCloseMassageBox,在里面拖一个lable控件,去掉 ...
随机推荐
- HDU 2222 AC自动机模板题
1.HDU 2222 2.题意:给出n个单词,一个字串,求有多少个单词在字串里出现了.注意给出的单词可能会重复,重复的不计. 3.总结:入门题.在查询这里还是不太懂. #include<bits ...
- JAVA_javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
tomcat访问https请求返回: javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name at sun.se ...
- java分享第十五天(log4j 格式详解)
log4j 格式详解 log4j.rootLogger=日志级别,appender1, appender2, -. 日志级别:ALL<DEBUG<INFO<WARN<ERRO ...
- Java json串生成及转bean
package com; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j ...
- WPF整理-使用ResourceDictionary管理Logical Resources
“Logical resources may be of various types, such as brushes, geometries, styles, and templates.Placi ...
- Opencv算法学习二
1.直方图:图片中像素值分布情况的坐标图. 直方图均衡化:按一定规律拉伸像素值,提高像素值少的点,增加原图的对比度,使人感觉更清晰的函数. equalizeHist( src, dst ); 2.ha ...
- '-[__NSCFString stringFromMD5]: unrecognized selector sent to instance 0x14d89a50'
类型:ios 问题描述: 导入百度地图 然后在模拟器运行可以,真机测试不行: 报错: '-[__NSCFString stringFromMD5]: unrecognized selector sen ...
- 详解Maple如何公式推导和生成代码
公式推导 直观自然的数学表达式,智能的关联菜单,交互式助手等协助您从容通过推导过程,让您更容易地完成解决方案的开发,快速.无错! 分析 Maple 内置超过大量的计算函数,包括积分变换,微分方程求解器 ...
- PostgreSQL 9.3发布
9月9日,PostgreSQL全球开发组宣布了9.3版发布的消息.从2010年9.0版开始,PostgreSQL已经连续四个版本稳定地按时在每年9月中旬发布,从一个侧面也显示了开发团队的强大实力. 9 ...
- IE7中使用Jquery动态操作name问题
问题:IE7中无法使用Jquery动态操作页面元素的name属性. 在项目中有出现问题,某些客户的机器偶尔会有,后台取不到前台的数据值. 然开发和测试环境总是不能重现问题.坑爹之处就在于此,不能重现就 ...