【Android自定义Dialog】电视机开关效果的Dialog
2015-11-19 16:27
501 查看
前言:
今天没有什么工作要做,就准备网上找个源码解剖下,找些干货耍耍。在DEV资源网找到了这个http://www.devstore.cn/code/info/1144.html【Android音乐播放器(歌词.均衡器.收藏.qq5.0菜单.通知)】,看了一个早上,发现些不错的东西,这里先抽取其中的一个自定义Dialog介绍给大家。(项目源码里介绍这个Dialog是来自优酷客户端的)
废话不多说,这里先给大家看看这个酷炫的电视开关效果的Dialog:
这里我用一个Button去展示这个Dialog,本文并没有太多内容,其实主要就是给Dialog加了个动画
只要继承TVAnimDialog这个类就可以实现这个酷炫的效果了
使用:
MyDialog的代码:
TVAnimDialog类的代码:
里面用到了自定义样式R.style.TVAnimDialog和R.style.TVAnimDialogWindowAnim,需要在style.xml文件添加如下代码:
接下来,样式里面使用到的2个动画是本文的关键之处,需要在res目录下创建文件夹“anim”,放入两个文件
dialog_tv_on.xml与dialog_tv_off.xml(开启动画/关闭动画)
dialog_tv_on.xml代码:
dialog_tv_off.xml代码:
Demo代码下载地址:http://download.csdn.net/detail/jingleye/9283169
致谢:
首先这里感谢文章引用Dev源码资源的提供者——mylove1
这里要谢谢鸿洋大神引荐的一款gif制作软件LICEcap,附上地址http://www.cockos.com/licecap/
喜欢的话要顶一下哦~
今天没有什么工作要做,就准备网上找个源码解剖下,找些干货耍耍。在DEV资源网找到了这个http://www.devstore.cn/code/info/1144.html【Android音乐播放器(歌词.均衡器.收藏.qq5.0菜单.通知)】,看了一个早上,发现些不错的东西,这里先抽取其中的一个自定义Dialog介绍给大家。(项目源码里介绍这个Dialog是来自优酷客户端的)
废话不多说,这里先给大家看看这个酷炫的电视开关效果的Dialog:
这里我用一个Button去展示这个Dialog,本文并没有太多内容,其实主要就是给Dialog加了个动画
只要继承TVAnimDialog这个类就可以实现这个酷炫的效果了
使用:
public void showTVAnimDialog(View v){ MyDialog mDialog = new MyDialog(this); mDialog.show(); }
MyDialog的代码:
package com.mw.tvanimdialogdemo; import com.mw.tvanimdialogdemo.dialog.TVAnimDialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MyDialog extends TVAnimDialog { private Button button; public MyDialog(Context context) { super(context); // TODO Auto-generated constructor stub } protected MyDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); // TODO Auto-generated constructor stub } public MyDialog(Context context, int theme) { super(context, theme); // TODO Auto-generated constructor stub } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.dialog_test); button = (Button) findViewById(R.id.dialog_about_btn_ok); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dismiss(); } }); } }
TVAnimDialog类的代码:
package com.mw.tvanimdialogdemo.dialog; import com.mw.tvanimdialogdemo.R; import android.app.Dialog; import android.content.Context; import android.os.Bundle; /** * By CWD 2013 Open Source Project * * <br> * <b>电视机开关效果的Dialog</b></br> * * <br> * 取自优酷视频客户端退出时电视机关闭动画效果,返向推出打开效果,继承该类就带有该动画效果</br> * * @author CWD * @version 2013.07.31 v1.0 实现动画效果 <br> * 2013.08.01 v1.1 实现对话框关闭的监听 </br> */ public class TVAnimDialog extends Dialog { private int dialogId = MyConstant.DIALOG_DISMISS; private OnTVAnimDialogDismissListener listener; public TVAnimDialog(Context context) { super(context, R.style.TVAnimDialog);// 此处附上Dialog样式 // TODO Auto-generated constructor stub } public TVAnimDialog(Context context, int theme) { super(context, theme); // TODO Auto-generated constructor stub } protected TVAnimDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); // TODO Auto-generated constructor stub } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); getWindow().setWindowAnimations(R.style.TVAnimDialogWindowAnim);// 此处附上Dialog动画 } @Override public void dismiss() { // TODO Auto-generated method stub super.dismiss(); if (listener != null) { listener.onDismiss(dialogId); } } /** * 用于区分Dialog用途 * * @param dialogId * Dialog ID */ public void setDialogId(int dialogId) { this.dialogId = dialogId; } /** * 设置监听器 * * @param listener * OnTVAnimDialogDismissListener */ public void setOnTVAnimDialogDismissListener( OnTVAnimDialogDismissListener listener) { this.listener = listener; } /** * 用于监听对话框关闭的接口 */ public interface OnTVAnimDialogDismissListener { /** * 对话框关闭 * * @param dialogId * Dialog ID */ void onDismiss(int dialogId); } }
里面用到了自定义样式R.style.TVAnimDialog和R.style.TVAnimDialogWindowAnim,需要在style.xml文件添加如下代码:
<style name="TVAnimDialog" parent="android:style/Theme.Dialog"> <item name="android:windowBackground">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> </style> <style name="TVAnimDialogWindowAnim" mce_bogus="1" parent="android:Animation"> <item name="android:windowEnterAnimation">@anim/dialog_tv_on</item> <item name="android:windowExitAnimation">@anim/dialog_tv_off</item> </style>
接下来,样式里面使用到的2个动画是本文的关键之处,需要在res目录下创建文件夹“anim”,放入两个文件
dialog_tv_on.xml与dialog_tv_off.xml(开启动画/关闭动画)
dialog_tv_on.xml代码:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" android:zAdjustment="top" > <!-- 电视机打开动画效果,返向更改off动画实现 --> <scale android:duration="200" android:fromXScale="0.0" android:fromYScale="0.3" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50.0%" android:pivotY="50.0%" android:toXScale="1.0" android:toYScale="1.0" /> <scale android:duration="200" android:fromXScale="1.0" android:fromYScale="0.003" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50.0%" android:pivotY="50.0%" android:startOffset="250" android:toXScale="1.0" android:toYScale="1.0" /> <alpha android:duration="400" android:fillAfter="true" android:fillEnabled="true" android:fromAlpha="0.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="1.0" /> </set>
dialog_tv_off.xml代码:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" android:zAdjustment="top" > <!-- 电视机关闭动画效果,源码来自优酷视频客户端 --> <scale android:duration="200" android:fromXScale="1.0" android:fromYScale="1.0" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50.0%" android:pivotY="50.0%" android:toXScale="1.0" android:toYScale="0.003" /> <scale android:duration="200" android:fromXScale="1.0" android:fromYScale="1.0" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50.0%" android:pivotY="50.0%" android:startOffset="200" android:toXScale="0.0" android:toYScale="0.3" /> <alpha android:duration="400" android:fillAfter="true" android:fillEnabled="true" android:fromAlpha="1.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="0.0" /> </set>
Demo代码下载地址:http://download.csdn.net/detail/jingleye/9283169
致谢:
首先这里感谢文章引用Dev源码资源的提供者——mylove1
这里要谢谢鸿洋大神引荐的一款gif制作软件LICEcap,附上地址http://www.cockos.com/licecap/
喜欢的话要顶一下哦~
相关文章推荐
- Android Fragment 真正的完全解析(下)
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )屏幕适配
- Android material design support library -- CollapsingToolbarLayout简介
- Android中实现静态的默认安装和卸载应用
- 【Android】多个EditText设置其中一个不可编辑并隐藏键盘
- android中数据的存储方式(一)File 和 SharedPreferences
- Android 内存管理-需要注意的事项
- android动画基础
- Android基于源码分析Handler的消息机制
- android aidl和普通service
- Android Studio常见问题 -- AndroidManifest.xml 覆盖问题
- android中XLIFF
- Android Studio中如何打JAR包
- iOS 和 Android 设计理念的演变
- android nfc MifareUltralight读写
- Android修改状态栏颜色 布局错乱问题解决
- Android CrashHandler使用时存在多个Log文件问题
- android Graphics
- Android音频系统之AudioFlinger(二)
- Ubuntu搭建Android开发环境