通过style实现从屏幕底下弹出dialog动画效果
来源:互联网 发布:ubuntu怎么看硬盘大小 编辑:程序博客网 时间:2024/05/22 08:13
在项目中,想实现这么一个dialog,以前都是在代码中实现动画,写dialog,感觉要写一大推,很麻烦,今天实现了一个通用的方法:效果图如下
第一步:首先自定义Dialog
public class SelfDefineDialogUtil extends Dialog implements View.OnClickListener { public SelfDefineDialogUtil(Context context) { //重点实现R.style.DialogStyle 动画效果 this(context, R.style.DialogStyle) ; mContext = context ; } public SelfDefineDialogUtil(Context context, int themeResId) { super(context, themeResId); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.category_dialog_layout); WindowManager.LayoutParams params = getWindow().getAttributes(); //设置显示的位置 params.gravity = Gravity.TOP ; //设置Y轴的距离 params.y = ViewUtil.dp2px(mContext,60) ; //设置dialog的宽度 params.width = ViewUtil.getScreenWidthPixels(mContext) * 9 / 10; //设置dialog的高度 params.height = ViewUtil.getScreenHeightPixels(mContext) * 1 / 2 ; getWindow().setAttributes(params); }}
第二步:实现 R.style.DialogStyle
<style name="DialogStyle" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:textColor">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:layout_width">fill_parent</item> <item name="android:windowIsFloating">true</item> <item name="android:windowBackground">@drawable/panel_background</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowIsTranslucent">true</item> <item name="android:backgroundDimAmount">0.3</item> <item name="android:backgroundDimEnabled">true</item> //动画效果 <item name="android:windowAnimationStyle">@style/MyAnimation</item> <item name="android:textColorPrimary">#DD000000</item> <item name="android:textColorSecondary">#8A000000</item> <item name="android:textColorHint">#42000000</item> <item name="android:windowCloseOnTouchOutside">false</item> </style>//进入和退出的动画命名<style name="MyAnimation"> <item name="android:windowEnterAnimation">@anim/dialog_top_enter</item> <item name="android:windowExitAnimation">@anim/dialog_top_exit</item> </style>//具体的进入和退出动画//@anim/dialog_top_enter 进入动画<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator"> <!--减速度加速器--> <translate android:duration="250" android:fromYDelta="100%" android:toYDelta="0"/></set>// @anim/dialog_top_exit 退出动画<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <!--加速度插值器--> <translate android:duration="250" android:fromYDelta="0" android:startOffset="100" android:toYDelta="100%"/></set>
第三步:显示Dialog的位置
如第一步已经显示出来了
第四步:贴出ViewUtil工具类
/** * 常用单位转换的辅助类 */public class ViewUtil { private ViewUtil() { /** cannot be instantiated **/ throw new UnsupportedOperationException("cannot be instantiated"); } private static int screenWidthPixels; private static int screenHeightPixels; /** * dp转px * * @param context * @param dpVal * @return */ public static int dp2px(Context context, float dpVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, context.getResources().getDisplayMetrics()); } /** * sp转px * * @param context * @param spVal * @return */ public static int sp2px(Context context, float spVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, context.getResources().getDisplayMetrics()); } /** * px转dp * * @param context * @param pxVal * @return */ public static float px2dp(Context context, float pxVal) { final float scale = context.getResources().getDisplayMetrics().density; return (pxVal / scale); } /** * px转sp * * @param pxVal * @param pxVal * @return */ public static float px2sp(Context context, float pxVal) { return (pxVal / context.getResources().getDisplayMetrics().scaledDensity); } /** * @param context * @return */ public static int getScreenWidthPixels(Context context) { if (context == null) { return 0; } if (screenWidthPixels > 0) { return screenWidthPixels; } DisplayMetrics dm = new DisplayMetrics(); WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); manager.getDefaultDisplay().getMetrics(dm); screenWidthPixels = dm.widthPixels; return screenWidthPixels; } /** * @param context * @return */ public static int getScreenHeightPixels(Context context) { if (context == null) { return 0; } if (screenHeightPixels > 0) { return screenHeightPixels; } DisplayMetrics dm = new DisplayMetrics(); WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); manager.getDefaultDisplay().getMetrics(dm); screenHeightPixels = dm.heightPixels; return screenHeightPixels; }}
以上,就是一整套,大家可以直接拿着用
阅读全文
0 0
- 通过style实现从屏幕底下弹出dialog动画效果
- 从屏幕左下角弹出Dialog动画
- 自定义Dialog对话框并实现从底部弹出的动画效果
- 自定义dialog占屏幕一半及从屏幕下方弹出动画
- 窗口 dialog 弹出时动画效果
- Android安卓用Dialog对话框简单并且完美实现popupWindow底部弹出效果,有动画效果
- 从下向上弹出Dialog 动画
- 安卓中dialog从地上弹出来效果。
- Android 实现屏幕底部弹出Dialog
- Android自定义Dialog实现弹出二维码效果
- 通过画图实现动画效果
- 自定义dialog 弹出动画
- Android自定义Dialog样式,从屏幕底部滑出动画
- Android 动画效果弹出PopupWindow,同时屏幕背景变暗
- 简单利用Dialog实现Ios从底部弹出的效果,合QQ空间里面的发表说说弹出拍照的效果类似
- 利用ViewFlipper实现屏幕切换动画效果
- ViewFlipper实现屏幕切换动画效果
- 使用ViewFlipper实现屏幕切换动画效果
- 前端优化之-css与js阻塞问题
- Spring Bean xml显式装配之构造函数
- python 字典用法
- SecureCRT安装
- Python中if __name__ == "__main__": 的作用
- 通过style实现从屏幕底下弹出dialog动画效果
- ElasticSearch搜索引擎java客户端接口详解
- Notepad++配色
- C语言const:禁止修改变量的值
- 使用python进行数据分析介绍及部分教程
- Android 磁场传感器 地磁倾角计算 SensorManager.getInclination方法
- 为什么canvas绘制的线条会模糊、有锯齿?
- hdoj 1686 Oulipo
- 软件光栅化渲染器(九)