实现效果
功能说明
本视图工具的创作灵感来自于新浪微博手机客户端,新浪微博手机客户端的微博发表界面便是类似的实现效果,其实实现方法比较简单,主要用到几种动画效果,如旋转,透明,转移,以及计时器等,将动画效果附加到按钮上,然后将整个界面作为一个Dialog实现就可以了。
适用于新手及新学习Android的码友们,老玩家当然也可以看看,这个还是挺简单挺实用的,在后面会简略介绍实现方法及源代码,同时博客的最后还提供源代码和图片等资源github下载地址。
实现步骤
步骤一:认识安卓动画
在编写下面的代码前,我们先来认识下Android的基本动画,本视图工具主要用到了三种动画形式:
alpha:
透明动画,主要根据alpha值的变化改变控件的透明度
- android:fromAlpha 动画开始的透明度,从0.0 –1.0 ,0.0表示全透明,1.0表示完全不透明
- android:toAlpha 动画结束时的透明度,也是从0.0 –1.0 ,0.0表示全透明,1.0表示完全不透明
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
- <?xml version=“1.0” encoding=“utf-8”?>
- <alpha xmlns:android=“http://schemas.android.com/apk/res/android”
- android:duration=“400”
- android:fromAlpha=“1.0”
- android:toAlpha=“0” />
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="400"
android:fromAlpha="1.0"
android:toAlpha="0" />
rotate:
旋转动画,主要以其中心为旋转点,循环匀速旋转
- android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
- android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
- android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
- android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
- <?xml version=“1.0” encoding=“utf-8”?>
- <rotate xmlns:android=“http://schemas.android.com/apk/res/android”
- android:duration=“400”
- android:fromDegrees=“0”
- android:toDegrees=“-135”
- android:pivotX=“50%”
- android:pivotY=“50%”
- />
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="400"
android:fromDegrees="0"
android:toDegrees="-135"
android:pivotX="50%"
android:pivotY="50%"
/>
位移动画,主要以控件的x,y轴为圆点,进行方位移动
- android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
- android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
- android:toXDelta 结束点X轴坐标
- android:toYDelta 结束点Y轴坐标
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
- <?xml version=“1.0” encoding=“utf-8”?>
- <translate xmlns:android=“http://schemas.android.com/apk/res/android”
- android:duration=“600”
- android:fromYDelta=“100%”
- android:interpolator=“@android:anim/anticipate_overshoot_interpolator”
- android:toYDelta=“0” />
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="600"
android:fromYDelta="100%"
android:interpolator="@android:anim/anticipate_overshoot_interpolator"
android:toYDelta="0" />
整个Demo项目的结构如下:
步骤二:添加Dialog布局
新建main_dialog_publish.xml布局,添加如下代码:
- <?xml version=“1.0” encoding=“utf-8”?>
- <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
- android:layout_width=”match_parent”
- android:layout_height=”match_parent” >
- <RelativeLayout
- android:id=”@+id/mainPublish_dialog_rlMain”
- android:layout_width=”match_parent”
- android:layout_height=”match_parent”
- android:background=”#eeffffff”
- android:clickable=”true” >
- <ImageView
- android:layout_width=”220dp”
- android:layout_height=”wrap_content”
- android:layout_centerHorizontal=”true”
- android:layout_marginTop=”60dp”
- android:contentDescription=”@null”
- android:scaleType=”centerInside”
- android:src=”@drawable/mainactivity_publish_worlduc” />
- <LinearLayout
- android:layout_width=”match_parent”
- android:layout_height=”wrap_content”
- android:layout_alignParentBottom=”true”
- android:baselineAligned=”false”
- android:orientation=”horizontal” >
- <LinearLayout
- android:id=”@+id/mainPublish_dialog_llBtnArticle”
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_weight=”1”
- android:clickable=”true”
- android:orientation=”vertical”
- android:paddingBottom=”70dp”
- android:paddingTop=”20dp” >
- <ImageView
- android:layout_width=”55dp”
- android:layout_height=”55dp”
- android:layout_gravity=”center_horizontal”
- android:contentDescription=”@null”
- android:src=”@drawable/mainactivity_dialogpublish_article_selector” />
- <TextView
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_gravity=”center_horizontal”
- android:layout_marginTop=”5dp”
- android:text=”文章”
- android:textColor=”#3E3E3E”
- android:textSize=”13sp” />
- </LinearLayout>
- <LinearLayout
- android:id=”@+id/mainPublish_dialog_llBtnMiniBlog”
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_weight=”1”
- android:clickable=”true”
- android:orientation=”vertical”
- android:paddingBottom=”70dp”
- android:paddingTop=”20dp” >
- <ImageView
- android:layout_width=”55dp”
- android:layout_height=”55dp”
- android:layout_gravity=”center_horizontal”
- android:contentDescription=”@null”
- android:src=”@drawable/mainactivity_dialogpublish_miniblog_selector” />
- <TextView
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_gravity=”center_horizontal”
- android:layout_marginTop=”5dp”
- android:text=”微博”
- android:textColor=”#3E3E3E”
- android:textSize=”13sp” />
- </LinearLayout>
- <LinearLayout
- android:id=”@+id/mainPublish_dialog_llBtnLetter”
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_weight=”1”
- android:clickable=”true”
- android:orientation=”vertical”
- android:paddingBottom=”70dp”
- android:paddingTop=”20dp” >
- <ImageView
- android:layout_width=”55dp”
- android:layout_height=”55dp”
- android:layout_gravity=”center_horizontal”
- android:contentDescription=”@null”
- android:src=”@drawable/mainactivity_dialogpublish_letter_selector” />
- <TextView
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_gravity=”center_horizontal”
- android:layout_marginTop=”5dp”
- android:text=”私信”
- android:textColor=”#3E3E3E”
- android:textSize=”13sp” />
- </LinearLayout>
- <LinearLayout
- android:id=”@+id/mainPublish_dialog_llBtnPhoto”
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_weight=”1”
- android:clickable=”true”
- android:orientation=”vertical”
- android:paddingBottom=”70dp”
- android:paddingTop=”20dp” >
- <ImageView
- android:layout_width=”55dp”
- android:layout_height=”55dp”
- android:layout_gravity=”center_horizontal”
- android:contentDescription=”@null”
- android:src=”@drawable/mainactivity_dialogpublish_photo_selector” />
- <TextView
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_gravity=”center_horizontal”
- android:layout_marginTop=”5dp”
- android:text=”照片”
- android:textColor=”#3E3E3E”
- android:textSize=”13sp” />
- </LinearLayout>
- </LinearLayout>
- </RelativeLayout>
- <LinearLayout
- android:id=”@+id/mainPublish_dialog_llBtnMenu”
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_alignParentBottom=”true”
- android:layout_centerHorizontal=”true”
- android:clickable=”true”
- android:gravity=”bottom|center_horizontal”
- android:orientation=”vertical”
- android:paddingLeft=”10dp”
- android:paddingRight=”10dp” >
- <ImageView
- android:id=”@+id/mainPublish_dialog_ivMenu”
- android:layout_width=”45dp”
- android:layout_height=”45dp”
- android:layout_marginBottom=”4dp”
- android:contentDescription=”@null”
- android:src=”@drawable/mainactivity_publish_publish2” />
- </LinearLayout>
- </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/mainPublish_dialog_rlMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eeffffff"
android:clickable="true" >
<ImageView
android:layout_width="220dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:contentDescription="@null"
android:scaleType="centerInside"
android:src="@drawable/mainactivity_publish_worlduc" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:baselineAligned="false"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/mainPublish_dialog_llBtnArticle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:orientation="vertical"
android:paddingBottom="70dp"
android:paddingTop="20dp" >
<ImageView
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
android:src="@drawable/mainactivity_dialogpublish_article_selector" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:text="文章"
android:textColor="#3E3E3E"
android:textSize="13sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/mainPublish_dialog_llBtnMiniBlog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:orientation="vertical"
android:paddingBottom="70dp"
android:paddingTop="20dp" >
<ImageView
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
android:src="@drawable/mainactivity_dialogpublish_miniblog_selector" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:text="微博"
android:textColor="#3E3E3E"
android:textSize="13sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/mainPublish_dialog_llBtnLetter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:orientation="vertical"
android:paddingBottom="70dp"
android:paddingTop="20dp" >
<ImageView
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
android:src="@drawable/mainactivity_dialogpublish_letter_selector" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:text="私信"
android:textColor="#3E3E3E"
android:textSize="13sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/mainPublish_dialog_llBtnPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:orientation="vertical"
android:paddingBottom="70dp"
android:paddingTop="20dp" >
<ImageView
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
android:src="@drawable/mainactivity_dialogpublish_photo_selector" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:text="照片"
android:textColor="#3E3E3E"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<LinearLayout
android:id="@+id/mainPublish_dialog_llBtnMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:clickable="true"
android:gravity="bottom|center_horizontal"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp" >
<ImageView
android:id="@+id/mainPublish_dialog_ivMenu"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginBottom="4dp"
android:contentDescription="@null"
android:src="@drawable/mainactivity_publish_publish2" />
</LinearLayout>
</RelativeLayout>
步骤三:添加主代码
新建PublishDialog类,代码如下:
- package com.jaiky.publishpopup;
- import android.app.Dialog;
- import android.content.Context;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.WindowManager;
- import android.view.animation.AnimationUtils;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.RelativeLayout;
- /**
- * Author by Jaiky, Email jaikydota@163.com, Date on 3/2/2015.
- * PS: Not easy to write code, please indicate.
- */
- public class PublishDialog extends Dialog {
- private RelativeLayout rlMain;
- private Context context;
- private LinearLayout llBtnArticle, llBtnMiniBlog, llBtnLetter, llBtnPhoto, llBtnMenu;
- private Handler handler;
- private ImageView ivMenu;
- public PublishDialog(Context context) {
- this(context, R.style.main_publishdialog_style);
- }
- private PublishDialog(Context context, int theme) {
- super(context, theme);
- this.context = context;
- init();
- }
- /**
- * 初始化
- */
- private void init() {
- handler = new Handler();
- //填充视图
- setContentView(R.layout.main_dialog_publish);
- rlMain = (RelativeLayout) findViewById(R.id.mainPublish_dialog_rlMain);
- llBtnArticle = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnArticle);
- llBtnMiniBlog = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnMiniBlog);
- llBtnLetter = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnLetter);
- llBtnPhoto = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnPhoto);
- llBtnMenu = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnMenu);
- ivMenu = (ImageView) findViewById(R.id.mainPublish_dialog_ivMenu);
- llBtnMenu.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- outputDialog();
- }
- });
- rlMain.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- outputDialog();
- }
- });
- }
- /**
- * 进入对话框(带动画)
- */
- private void inputDialog() {
- llBtnArticle.setVisibility(View.INVISIBLE);
- llBtnMiniBlog.setVisibility(View.INVISIBLE);
- llBtnLetter.setVisibility(View.INVISIBLE);
- llBtnPhoto.setVisibility(View.INVISIBLE);
- //背景动画
- rlMain.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_fade_in));
- //菜单按钮动画
- ivMenu.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_rotate_right));
- //选项动画
- llBtnArticle.setVisibility(View.VISIBLE);
- llBtnArticle.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- llBtnMiniBlog.setVisibility(View.VISIBLE);
- llBtnMiniBlog.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
- }
- }, 100);
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- llBtnLetter.setVisibility(View.VISIBLE);
- llBtnLetter.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
- }
- }, 200);
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- llBtnPhoto.setVisibility(View.VISIBLE);
- llBtnPhoto.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
- }
- }, 300);
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (isShowing()) {
- outputDialog();
- return true;
- }
- else {
- return super.onKeyDown(keyCode, event);
- }
- }
- /**
- * 取消对话框(带动画)
- */
- private void outputDialog() {
- //退出动画
- rlMain.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_fade_out));
- ivMenu.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_rotate_left));
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- dismiss();
- }
- }, 400);
- llBtnArticle.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
- llBtnArticle.setVisibility(View.INVISIBLE);
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- llBtnMiniBlog.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
- llBtnMiniBlog.setVisibility(View.INVISIBLE);
- }
- }, 50);
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- llBtnLetter.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
- llBtnLetter.setVisibility(View.INVISIBLE);
- }
- }, 100);
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- llBtnPhoto.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
- llBtnPhoto.setVisibility(View.INVISIBLE);
- }
- }, 150);
- }
- @Override
- public void show() {
- super.show();
- inputDialog();
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //全屏
- WindowManager.LayoutParams params = getWindow().getAttributes();
- params.height = ViewGroup.LayoutParams.MATCH_PARENT;
- params.width = ViewGroup.LayoutParams.MATCH_PARENT;
- getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
- }
- public PublishDialog setArticleBtnClickListener(android.view.View.OnClickListener clickListener) {
- llBtnArticle.setOnClickListener(clickListener);
- return this;
- }
- public PublishDialog setMiniBlogBtnClickListener(android.view.View.OnClickListener clickListener) {
- llBtnMiniBlog.setOnClickListener(clickListener);
- return this;
- }
- public PublishDialog setLetterBtnClickListener(android.view.View.OnClickListener clickListener) {
- llBtnLetter.setOnClickListener(clickListener);
- return this;
- }
- public PublishDialog setPhotoBtnClickListener(android.view.View.OnClickListener clickListener) {
- llBtnPhoto.setOnClickListener(clickListener);
- return this;
- }
- }
package com.jaiky.publishpopup;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
/**
* Author by Jaiky, Email jaikydota@163.com, Date on 3/2/2015.
* PS: Not easy to write code, please indicate.
*/
public class PublishDialog extends Dialog {
private RelativeLayout rlMain;
private Context context;
private LinearLayout llBtnArticle, llBtnMiniBlog, llBtnLetter, llBtnPhoto, llBtnMenu;
private Handler handler;
private ImageView ivMenu;
public PublishDialog(Context context) {
this(context, R.style.main_publishdialog_style);
}
private PublishDialog(Context context, int theme) {
super(context, theme);
this.context = context;
init();
}
/**
* 初始化
*/
private void init() {
handler = new Handler();
//填充视图
setContentView(R.layout.main_dialog_publish);
rlMain = (RelativeLayout) findViewById(R.id.mainPublish_dialog_rlMain);
llBtnArticle = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnArticle);
llBtnMiniBlog = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnMiniBlog);
llBtnLetter = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnLetter);
llBtnPhoto = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnPhoto);
llBtnMenu = (LinearLayout) findViewById(R.id.mainPublish_dialog_llBtnMenu);
ivMenu = (ImageView) findViewById(R.id.mainPublish_dialog_ivMenu);
llBtnMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
outputDialog();
}
});
rlMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
outputDialog();
}
});
}
/**
* 进入对话框(带动画)
*/
private void inputDialog() {
llBtnArticle.setVisibility(View.INVISIBLE);
llBtnMiniBlog.setVisibility(View.INVISIBLE);
llBtnLetter.setVisibility(View.INVISIBLE);
llBtnPhoto.setVisibility(View.INVISIBLE);
//背景动画
rlMain.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_fade_in));
//菜单按钮动画
ivMenu.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_rotate_right));
//选项动画
llBtnArticle.setVisibility(View.VISIBLE);
llBtnArticle.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
handler.postDelayed(new Runnable() {
@Override
public void run() {
llBtnMiniBlog.setVisibility(View.VISIBLE);
llBtnMiniBlog.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
}
}, 100);
handler.postDelayed(new Runnable() {
@Override
public void run() {
llBtnLetter.setVisibility(View.VISIBLE);
llBtnLetter.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
}
}, 200);
handler.postDelayed(new Runnable() {
@Override
public void run() {
llBtnPhoto.setVisibility(View.VISIBLE);
llBtnPhoto.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_in));
}
}, 300);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (isShowing()) {
outputDialog();
return true;
}
else {
return super.onKeyDown(keyCode, event);
}
}
/**
* 取消对话框(带动画)
*/
private void outputDialog() {
//退出动画
rlMain.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_fade_out));
ivMenu.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_rotate_left));
handler.postDelayed(new Runnable() {
@Override
public void run() {
dismiss();
}
}, 400);
llBtnArticle.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
llBtnArticle.setVisibility(View.INVISIBLE);
handler.postDelayed(new Runnable() {
@Override
public void run() {
llBtnMiniBlog.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
llBtnMiniBlog.setVisibility(View.INVISIBLE);
}
}, 50);
handler.postDelayed(new Runnable() {
@Override
public void run() {
llBtnLetter.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
llBtnLetter.setVisibility(View.INVISIBLE);
}
}, 100);
handler.postDelayed(new Runnable() {
@Override
public void run() {
llBtnPhoto.startAnimation(AnimationUtils.loadAnimation(context, R.anim.mainactivity_push_bottom_out));
llBtnPhoto.setVisibility(View.INVISIBLE);
}
}, 150);
}
@Override
public void show() {
super.show();
inputDialog();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//全屏
WindowManager.LayoutParams params = getWindow().getAttributes();
params.height = ViewGroup.LayoutParams.MATCH_PARENT;
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
}
public PublishDialog setArticleBtnClickListener(android.view.View.OnClickListener clickListener) {
llBtnArticle.setOnClickListener(clickListener);
return this;
}
public PublishDialog setMiniBlogBtnClickListener(android.view.View.OnClickListener clickListener) {
llBtnMiniBlog.setOnClickListener(clickListener);
return this;
}
public PublishDialog setLetterBtnClickListener(android.view.View.OnClickListener clickListener) {
llBtnLetter.setOnClickListener(clickListener);
return this;
}
public PublishDialog setPhotoBtnClickListener(android.view.View.OnClickListener clickListener) {
llBtnPhoto.setOnClickListener(clickListener);
return this;
}
}
——————————————————————————————————————–
获取源代码及资源文件:
——————————————————————————————————————–
声明
欢迎转载,但请保留文章原始出处
作者:Jaiky_杰哥
出处:http://blog.csdn.net/jaikydota163/article/details/52098884