NiftyDialogEffects
来源:互联网 发布:手机网络创业 编辑:程序博客网 时间:2024/06/10 17:10
在这个网站上有很多用js实现的对话框效果:http://tympanus.net/Development/ModalWindowEffects/
现在有人做出了相同效果的android版本,几乎和上面的一模一样,界面如下:
动画效果:
要查看更多的动画效果请参考上面给出的网站链接。
该项目的git地址为:https://github.com/sd6352051/NiftyDialogEffects
可能该项目是用android studio创建的吧,但是因为被墙的原因android studio不是很好用。虽然不能直接导入eclipse,不过相信有点基础知识的都会转为eclipse项目的。
用法示例;
- NiftyDialogBuilder dialogBuilder=NiftyDialogBuilder.getInstance(this);
- dialogBuilder
- .withTitle("Modal Dialog")
- .withMessage("This is a modal Dialog.")
- .show();
和alertdialog的用法类似。上面是最简单的用法,如果要运用动画等更多其他参数设置,可以参考下面的用法:
更多参数设置:
- dialogBuilder
- .withTitle("Modal Dialog")//.withTitle(null) no title
- .withTitleColor("#FFFFFF")//def
- .withDividerColor("#11000000")//def
- .withMessage("This is a modal Dialog.")//.withMessage(null) no Msg
- .withMessageColor("#FFFFFF")//def
- .withIcon(getResources().getDrawable(R.drawable.icon))
- .withDuration(700)//def
- .withEffect(effect)//def Effectstype.Slidetop
- .withButton1Text("OK")//def gone
- .withButton2Text("Cancel")//def gone
- .isCancelableOnTouchOutside(true)//def | isCancelable(true)
- .setCustomView(R.layout.custom_view,v.getContext())//.setCustomView(View or ResId,context)
- .setButton1Click(newView.OnClickListener(){
- @Override
- publicvoid onClick(View v){
- Toast.makeText(v.getContext(),"i'm btn1",Toast.LENGTH_SHORT).show();
- }
- })
- .setButton2Click(newView.OnClickListener(){
- @Override
- publicvoid onClick(View v){
- Toast.makeText(v.getContext(),"i'm btn2",Toast.LENGTH_SHORT).show();
- }
- })
- .show();
简要的介绍下该项目的实现方法:
dialog部分的代码很少,其实就是自定义了一个继承子Dialog的NiftyDialogBuilder,并实现了DialogInterface。
其中非常重要的是
- this.setOnShowListener(newOnShowListener(){
- @Override
- publicvoid onShow(DialogInterface dialogInterface){
- mLinearLayoutView.setVisibility(View.VISIBLE);
- if(type==null){
- type=Effectstype.Slidetop;
- }
- start(type);
- }
- });
监听对话框开始显示的事件,然后设置动画类型,之后调用start方法将动画效果运用到dialog的contentview中:
- privatevoid start(Effectstype type){
- BaseEffects animator= type.getAnimator();
- if(mDuration!=-1){
- animator.setDuration(Math.abs(mDuration));
- }
- animator.start(mRelativeLayoutView);
- }
mRelativeLayoutView就是dialog的contentview的主要部分,Effectstype
可以获得各种动画类型,每一种动画类型都是有专门的类实现的。
动画类型部分:
有如下动画类型:
所有动画类型都继承子抽象类BaseEffects
- publicabstractclassBaseEffects{
- privatestaticfinalint DURATION=1*700;
- protectedlong mDuration=DURATION;
- privateAnimatorSet mAnimatorSet;
- {
- mAnimatorSet =newAnimatorSet();
- }
- protectedabstractvoid setupAnimation(View view);
- publicvoid start(View view){
- reset(view);
- setupAnimation(view);
- mAnimatorSet.start();
- }
- publicvoid reset(View view){
- ViewHelper.setPivotX(view, view.getMeasuredWidth()/2.0f);
- ViewHelper.setPivotY(view, view.getMeasuredHeight()/2.0f);
- }
- publicAnimatorSet getAnimatorSet(){
- return mAnimatorSet;
- }
- publicvoid setDuration(long duration){
- this.mDuration= duration;
- }
- }
以SlideTop为例介绍是如何实现该抽象类的:
- publicclassSlideTopextendsBaseEffects{
- @Override
- protectedvoid setupAnimation(View view){
- getAnimatorSet().playTogether(
- ObjectAnimator.ofFloat(view,"translationY",-300,0).setDuration(mDuration),
- ObjectAnimator.ofFloat(view,"alpha",0,1).setDuration(mDuration*3/2)
- );
- }
- }
这些动画放到一个叫Effectstype
的枚举类中,然后需要的时候直接调用type.getAnimator()
方法就能得到动画的实例,就像start方法中做的那样。
- NiftyDialogEffects
- NiftyDialogEffects
- NiftyDialogEffects -简单分析
- NiftyDialogEffects-master 使用详解
- NiftyDialogEffects(各种动画的dialog)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- 一篇开源项目(NiftyDialogEffects)
- android日期选择控件分享
- Mybatis 3.1.1支持多数据库
- vue.js 2.0项目遇到的问题整理(持续更新中)
- JSON.parse()和JSON.stringify()
- aspDropDownList 绑定List
- NiftyDialogEffects
- ajax 解决跨域的四种方法
- Ubuntu 14.04 安装JDK1.6
- tableview个人中心-布局思路
- oracle 查看用户所在的表空间
- 使用xpath提取极客学院python课程内容名称
- DTD 文档类型定义
- Cocos2d-JS中CollectionView实现不同大小Cell同时显示的技巧(ListView中添加显示标签)
- WebRTC学习之十:最简单的视频聊天(使用WebRtcVideoEngine2)