Repository: Alex-Cin/Dialog
Branch: master
Commit: fcccb0a2353f
Files: 92
Total size: 102.9 KB
Directory structure:
gitextract_tkf2eqbg/
├── .gitignore
├── .idea/
│ ├── compiler.xml
│ ├── copyright/
│ │ └── profiles_settings.xml
│ ├── encodings.xml
│ ├── gradle.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── runConfigurations.xml
│ └── vcs.xml
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── alex/
│ │ └── dialogdemo/
│ │ ├── App.java
│ │ ├── dialog/
│ │ │ ├── BottomDialog.java
│ │ │ ├── LoadingDialog.java
│ │ │ ├── NoticeDialog.java
│ │ │ ├── OneButtonDialog.java
│ │ │ ├── SelectedProductDialog.java
│ │ │ └── base/
│ │ │ ├── Bottom2TopDialog.java
│ │ │ ├── CenterNormalDialog.java
│ │ │ ├── CenterScaleDialog.java
│ │ │ ├── SimpleDialog.java
│ │ │ ├── TaoBaoDialog.java
│ │ │ └── Top2BottomDialog.java
│ │ └── ui/
│ │ └── MainActivity.java
│ └── res/
│ ├── anim/
│ │ ├── alex_dialog_anim_bottom2top_in.xml
│ │ ├── alex_dialog_anim_bottom2top_out.xml
│ │ ├── alex_dialog_anim_fade_in.xml
│ │ ├── alex_dialog_anim_fade_out.xml
│ │ ├── alex_dialog_anim_scale_in.xml
│ │ ├── alex_dialog_anim_scale_out.xml
│ │ ├── alex_dialog_anim_top2bottom_in.xml
│ │ └── alex_dialog_anim_top2bottom_out.xml
│ ├── drawable/
│ │ ├── alex_dialog_layer_list_shadow_rectangle.xml
│ │ ├── layer_list_shadow_dialog_one_button.xml
│ │ ├── layer_list_shadow_rectangle.xml
│ │ └── selector_dialog_one_button_submit.xml
│ ├── layout/
│ │ ├── activity_main.xml
│ │ ├── dialog_loading.xml
│ │ ├── dialog_notice.xml
│ │ ├── dialog_one_button.xml
│ │ └── dialog_selected_product.xml
│ ├── values/
│ │ ├── alex_color.xml
│ │ ├── alex_dialog_anim_alpha_style.xml
│ │ ├── alex_dialog_anim_bottom2top_style.xml
│ │ ├── alex_dialog_anim_sacle_style.xml
│ │ ├── alex_dialog_anim_top2bottom_style.xml
│ │ ├── alex_dialog_base_dim_style.xml
│ │ ├── alex_dialog_base_light_style.xml
│ │ ├── alex_dialog_shadow_color_radius.xml
│ │ ├── alex_dimens.xml
│ │ ├── alex_string.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── shadow_color_radius.xml
│ │ ├── shadow_color_radius_dialog_one_button.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp/
│ └── dimens.xml
├── build.gradle
├── dialog/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── org/
│ │ └── alex/
│ │ └── dialog/
│ │ ├── anim/
│ │ │ └── BaseAnimatorSet.java
│ │ ├── annotation/
│ │ │ ├── AnimType.java
│ │ │ ├── ClickPosition.java
│ │ │ └── OnKeyType.java
│ │ ├── base/
│ │ │ └── BaseDialog.java
│ │ ├── callback/
│ │ │ ├── OnDialogClickListener.java
│ │ │ ├── OnWait2DismissListener.java
│ │ │ └── SimpleOnKeyListener.java
│ │ ├── helper/
│ │ │ └── OnClickHelper.java
│ │ └── util/
│ │ └── StatusBarUtils.java
│ └── res/
│ └── values/
│ ├── alex_theme_no_title_app.xml
│ └── strings.xml
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── sweeploadingview/
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src/
└── main/
├── AndroidManifest.xml
├── java/
│ └── org/
│ └── alex/
│ ├── callback/
│ │ └── SimpleAnimatorListener.java
│ └── sweeploadingview/
│ └── SweepLoadingView.java
└── res/
└── values/
├── alex_sweep_loading_view_attrs.xml
└── strings.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
================================================
FILE: .idea/compiler.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>
================================================
FILE: .idea/copyright/profiles_settings.xml
================================================
<component name="CopyrightManager">
<settings default="" />
</component>
================================================
FILE: .idea/encodings.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>
================================================
FILE: .idea/gradle.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/dialog" />
<option value="$PROJECT_DIR$/sweeploadingview" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
================================================
FILE: .idea/misc.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/Dialog.iml" filepath="$PROJECT_DIR$/Dialog.iml" />
<module fileurl="file://$PROJECT_DIR$/Dialog2.iml" filepath="$PROJECT_DIR$/Dialog2.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/dialog/dialog.iml" filepath="$PROJECT_DIR$/dialog/dialog.iml" />
<module fileurl="file://$PROJECT_DIR$/dialog/dialog.iml" filepath="$PROJECT_DIR$/dialog/dialog.iml" />
<module fileurl="file://$PROJECT_DIR$/sweeploadingview/sweeploadingview.iml" filepath="$PROJECT_DIR$/sweeploadingview/sweeploadingview.iml" />
</modules>
</component>
</project>
================================================
FILE: .idea/runConfigurations.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>
================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
================================================
FILE: README.md
================================================
# Dialog

================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.alex.dialogdemo"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':dialog')
compile project(':sweeploadingview')
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in E:\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.alex.dialogdemo">
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 从SDCard读取数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 申请联网权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 检测网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 申请读通讯录权限-->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- 申请写通讯录权限-->
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<!-- 申请拨号权限-->
<uses-permission android:name="android.permission.CALL_PHONE"/>
<!-- 申请写通话记录权限-->
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<!-- 申请读通话记录权限-->
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<!-- 申请发送短信权限-->
<uses-permission android:name="android.permission.SEND_SMS"/>
<!-- 申请写短信记录权限-->
<uses-permission android:name="android.permission.WRITE_SMS"/>
<!-- 申请读短信记录权限-->
<uses-permission android:name="android.permission.READ_SMS"/>
<!-- 申请监控电量变化 -->
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<!-- 申请开机启动权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- 打开Camera的权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.autofocus"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<!-- 开启闪光灯权限 -->
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<!-- 开启闪光灯权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/alex_theme_no_title">
<activity android:name=".ui.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
================================================
FILE: app/src/main/java/com/alex/dialogdemo/App.java
================================================
package com.alex.dialogdemo;
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/BottomDialog.java
================================================
package com.alex.dialogdemo.dialog;
import android.content.Context;
import android.view.View;
import com.alex.dialogdemo.R;
import com.alex.dialogdemo.dialog.base.Bottom2TopDialog;
import org.alex.dialog.annotation.ClickPosition;
/**
* 作者:Alex
* 时间:2016年09月10日 17:40
* 简述:
*/
public class BottomDialog extends Bottom2TopDialog<BottomDialog> {
public BottomDialog(Context context) {
super(context);
}
@Override
public int getLayoutRes() {
return R.layout.dialog_notice;
}
@Override
public void onCreateData() {
setOnCilckListener(R.id.tv_submit,R.id.tv_cancel);
}
@Override
public void onClick(View v, int id) {
if(R.id.tv_submit == id){
onDialogClickListener(ClickPosition.SUBMIT);
}else if(R.id.tv_cancel == id){
onDialogClickListener(ClickPosition.CANCEL);
}
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/LoadingDialog.java
================================================
package com.alex.dialogdemo.dialog;
import android.content.Context;
import android.view.View;
import com.alex.dialogdemo.R;
import com.alex.dialogdemo.dialog.base.SimpleDialog;
/**
* 作者:Alex
* 时间:2016年09月03日 21:29
* 简述:
*/
@SuppressWarnings("all")
public class LoadingDialog extends SimpleDialog<LoadingDialog> {
/*super(context,R.style.alex_dialog_base_light_style);*/
public LoadingDialog(Context context) {
super(context);
}
/**
* 配置 对话框的 布局文件
*/
@Override
public int getLayoutRes() {
return R.layout.dialog_loading;
}
/**
* 在 这里 进行 finndView 设置点击事件
*/
@Override
public void onCreateData() {
setCancelable(true);
setCanceledOnTouchOutside(false);
}
@Override
public void onClick(View v, int id) {
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/NoticeDialog.java
================================================
package com.alex.dialogdemo.dialog;
import android.content.Context;
import android.view.View;
import com.alex.dialogdemo.R;
import com.alex.dialogdemo.dialog.base.Top2BottomDialog;
import org.alex.dialog.annotation.ClickPosition;
/**
* 作者:Alex
* 时间:2016年09月10日 17:40
* 简述:
*/
public class NoticeDialog extends Top2BottomDialog<NoticeDialog> {
public NoticeDialog(Context context) {
super(context);
}
@Override
public int getLayoutRes() {
return R.layout.dialog_notice;
}
@Override
public void onCreateData() {
setOnCilckListener(R.id.tv_submit,R.id.tv_cancel);
}
@Override
public void onClick(View v, int id) {
if(R.id.tv_submit == id){
onDialogClickListener(ClickPosition.SUBMIT);
}else if(R.id.tv_cancel == id){
onDialogClickListener(ClickPosition.CANCEL);
}
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/OneButtonDialog.java
================================================
package com.alex.dialogdemo.dialog;
import android.content.Context;
import android.view.View;
import com.alex.dialogdemo.R;
import com.alex.dialogdemo.dialog.base.CenterScaleDialog;
import org.alex.dialog.annotation.ClickPosition;
/**
* 作者:Alex
* 时间:2016年09月09日 23:52
* 简述:
*/
public class OneButtonDialog extends CenterScaleDialog<OneButtonDialog> {
public OneButtonDialog(Context context) {
super(context);
}
/**
* 配置 对话框的 布局文件
*/
@Override
public int getLayoutRes() {
return R.layout.dialog_one_button;
}
/**
* 在 这里 进行 findView 设置点击事件
*/
@Override
public void onCreateData() {
setOnCilckListener(R.id.tv_submit);
}
/**
* 处理按钮点击事件 并绑定 onDialogClickListener
*
* @param v
*/
@Override
public void onClick(View v, int id) {
if (R.id.tv_submit == v.getId()) {
if (onDialogClickListener != null) {
onDialogClickListener.onDialogClick(this, ClickPosition.SUBMIT);
}
}
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/SelectedProductDialog.java
================================================
package com.alex.dialogdemo.dialog;
import android.content.Context;
import android.view.View;
import com.alex.dialogdemo.R;
import com.alex.dialogdemo.dialog.base.TaoBaoDialog;
import org.alex.dialog.annotation.ClickPosition;
/**
* 作者:Alex
* 时间:2016年09月09日 23:52
* 简述:
*/
public class SelectedProductDialog extends TaoBaoDialog<SelectedProductDialog> {
public SelectedProductDialog(Context context, View rootView) {
super(context, rootView, R.style.alex_dialog_base_light_style);
}
/**
* 配置 对话框的 布局文件
*/
@Override
public int getLayoutRes() {
return R.layout.dialog_selected_product;
}
/**
* 在 这里 进行 findView 设置点击事件
*/
@Override
public void onCreateData() {
setScaleWidth(1F);
setOnCilckListener(R.id.tv_submit);
}
/**
* 处理按钮点击事件 并绑定 onDialogClickListener
*
* @param v
*/
@Override
public void onClick(View v, int id) {
if (R.id.tv_submit == v.getId()) {
if (onDialogClickListener != null) {
onDialogClickListener.onDialogClick(this, ClickPosition.SUBMIT);
}
}
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/Bottom2TopDialog.java
================================================
package com.alex.dialogdemo.dialog.base;
import android.content.Context;
import com.alex.dialogdemo.R;
import org.alex.dialog.annotation.AnimType;
/**
* 作者:Alex
* 时间:2016/12/7 13 27
* 简述:
*/
public abstract class Bottom2TopDialog<D extends Bottom2TopDialog> extends SimpleDialog<D> {
public Bottom2TopDialog(Context context) {
super(context, R.style.alex_dialog_base_light_style);
}
/**
* 显示对话框,无动画
*/
@Override
public void show() {
show(AnimType.BOTTOM_2_TOP);
}
/**
* 显示对话框,强制转换对话框的动画类型
*
* @param animType
*/
@Override
public void show(@AnimType int animType) {
super.show(animType);
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/CenterNormalDialog.java
================================================
package com.alex.dialogdemo.dialog.base;
import android.content.Context;
import com.alex.dialogdemo.R;
import org.alex.dialog.annotation.AnimType;
/**
* 作者:Alex
* 时间:2016年09月10日 17:33
* 简述:
*/
public abstract class CenterNormalDialog<D extends CenterNormalDialog> extends SimpleDialog<D> {
public CenterNormalDialog(Context context) {
super(context, R.style.alex_dialog_base_light_style);
}
/**
* 显示对话框,无动画
*/
@Override
public void show() {
show(AnimType.CENTER_NORMAL);
}
/**
* 显示对话框,强制转换对话框的动画类型
*
* @param animType
*/
@Override
public void show(@AnimType int animType) {
super.show(animType);
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/CenterScaleDialog.java
================================================
package com.alex.dialogdemo.dialog.base;
import android.content.Context;
import com.alex.dialogdemo.R;
import org.alex.dialog.annotation.AnimType;
/**
* 作者:Alex
* 时间:2016年09月10日 17:33
* 简述:
*/
public abstract class CenterScaleDialog<D extends CenterScaleDialog> extends SimpleDialog<D> {
public CenterScaleDialog(Context context) {
super(context, R.style.alex_dialog_base_light_style);
}
/**
* 显示对话框,无动画
*/
@Override
public void show() {
show(AnimType.CENTER_SCALE);
}
/**
* 显示对话框,强制转换对话框的动画类型
*
* @param animType
*/
@Override
public void show(@AnimType int animType) {
super.show(animType);
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/SimpleDialog.java
================================================
package com.alex.dialogdemo.dialog.base;
import android.content.Context;
import android.view.Gravity;
import android.view.Window;
import com.alex.dialogdemo.R;
import org.alex.dialog.annotation.AnimType;
import org.alex.dialog.base.BaseDialog;
/**
* 作者:Alex
* 时间:2016/12/7 13 22
* 简述:
*/
public abstract class SimpleDialog<D extends SimpleDialog> extends BaseDialog<D> {
public SimpleDialog(Context context) {
super(context, R.style.alex_dialog_base_light_style);
}
public SimpleDialog(Context context, int theme) {
super(context, theme);
}
/**
* 显示对话框,无动画
*/
@Override
public void show() {
if (Gravity.BOTTOM == gravity) {
show(AnimType.BOTTOM_2_TOP);
} else if (Gravity.TOP == gravity) {
show(AnimType.TOP_2_BOTTOM);
} else if (Gravity.CENTER == gravity) {
show(animType);
} else {
super.show();
}
}
/**
* 显示对话框,强制转换对话框的动画类型
*/
public void show(@AnimType int animType) {
Window window = getWindow();
/*如果根据 AnimType 的类型,强制选择Dialog出现的位置*/
if (AnimType.BOTTOM_2_TOP == animType) {
setGravity(Gravity.BOTTOM);
window.setWindowAnimations(R.style.alex_dialog_anim_bottom2top);
} else if (AnimType.TOP_2_BOTTOM == animType) {
setGravity(Gravity.TOP);
window.setWindowAnimations(R.style.alex_dialog_anim_top2bottom);
} else if (AnimType.CENTER_SCALE == animType) {
setGravity(Gravity.CENTER);
window.setWindowAnimations(R.style.alex_dialog_anim_scale);
} else if (AnimType.CENTER_NORMAL == animType) {
setGravity(Gravity.CENTER);
window.setWindowAnimations(R.style.alex_dialog_anim_alpha);
}
super.show();
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/TaoBaoDialog.java
================================================
package com.alex.dialogdemo.dialog.base;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import org.alex.dialog.anim.BaseAnimatorSet;
import org.alex.dialog.annotation.AnimType;
/**
* 作者:Alex
* 时间:2016/12/7 13 28
* 简述:
*/
public abstract class TaoBaoDialog<D extends TaoBaoDialog> extends SimpleDialog<D> {
private BaseAnimatorSet inAnimSet;
private BaseAnimatorSet outAnimSet;
private View rootView;
protected int duration;
protected int backgroundColor;
private View parentView;
public TaoBaoDialog(Context context, View rootView, int theme) {
super(context, theme);
this.rootView = rootView;
initView();
}
protected void initView() {
duration = 300;
backgroundColor = Color.parseColor("#111111");
parentView = (View) rootView.getParent();
parentView.setBackgroundColor(backgroundColor);
inAnimSet = new WindowsInAs();
outAnimSet = new WindowsOutAs();
}
/**
* 显示对话框,强制转换对话框的动画类型
*/
@Override
public void show() {
show(AnimType.BOTTOM_2_TOP);
}
/**
* 显示对话框,强制转换对话框的动画类型
*
* @param animType
*/
@Override
public void show(@AnimType int animType) {
super.show(AnimType.BOTTOM_2_TOP);
parentView.setBackgroundColor(backgroundColor);
if (rootView != null && inAnimSet != null) {
inAnimSet.duration(duration).playOn(rootView);
}
}
@Override
public void dismiss() {
super.dismiss();
new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
parentView.setBackgroundColor(0);
}
}.sendEmptyMessageDelayed(100, duration);
if (rootView != null && outAnimSet != null) {
outAnimSet.duration(duration).playOn(rootView);
}
}
private final class WindowsInAs extends BaseAnimatorSet {
@Override
public void setAnimation(View view) {
ObjectAnimator rotationX = ObjectAnimator.ofFloat(view, "rotationX", 10, 0f).setDuration(150);
rotationX.setStartDelay(200);
animatorSet.playTogether(
ObjectAnimator.ofFloat(view, "scaleX", 1.0f, 0.8f).setDuration(350),
ObjectAnimator.ofFloat(view, "scaleY", 1.0f, 0.8f).setDuration(350),
ObjectAnimator.ofFloat(view, "rotationX", 0f, 10).setDuration(200),
rotationX,
ObjectAnimator.ofFloat(view, "translationY", 0, -0.1f * displayMetrics.heightPixels).setDuration(350)
);
}
}
private final class WindowsOutAs extends BaseAnimatorSet {
@Override
public void setAnimation(View view) {
ObjectAnimator rotationX = ObjectAnimator.ofFloat(view, "rotationX", 10, 0f).setDuration(150);
rotationX.setStartDelay(200);
animatorSet.playTogether(
ObjectAnimator.ofFloat(view, "scaleX", 0.8f, 1.0f).setDuration(350),
ObjectAnimator.ofFloat(view, "scaleY", 0.8f, 1.0f).setDuration(350),
ObjectAnimator.ofFloat(view, "rotationX", 0f, 10).setDuration(200),
rotationX,
ObjectAnimator.ofFloat(view, "translationY", -0.1f * displayMetrics.heightPixels, 0).setDuration(350)
);
}
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/Top2BottomDialog.java
================================================
package com.alex.dialogdemo.dialog.base;
import android.content.Context;
import com.alex.dialogdemo.R;
import org.alex.dialog.annotation.AnimType;
/**
* 作者:Alex
* 时间:2016/12/7 13 27
* 简述:
*/
public abstract class Top2BottomDialog<D extends Top2BottomDialog> extends SimpleDialog<D> {
public Top2BottomDialog(Context context) {
super(context, R.style.alex_dialog_base_light_style);
}
/**
* 显示对话框,无动画
*/
@Override
public void show() {
show(AnimType.TOP_2_BOTTOM);
}
/**
* 显示对话框,强制转换对话框的动画类型
*
* @param animType
*/
@Override
public void show(@AnimType int animType) {
super.show(animType);
}
}
================================================
FILE: app/src/main/java/com/alex/dialogdemo/ui/MainActivity.java
================================================
package com.alex.dialogdemo.ui;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import com.alex.dialogdemo.R;
import com.alex.dialogdemo.dialog.BottomDialog;
import com.alex.dialogdemo.dialog.LoadingDialog;
import com.alex.dialogdemo.dialog.NoticeDialog;
import com.alex.dialogdemo.dialog.OneButtonDialog;
import com.alex.dialogdemo.dialog.SelectedProductDialog;
import com.alex.dialogdemo.dialog.base.SimpleDialog;
import org.alex.dialog.annotation.ClickPosition;
import org.alex.dialog.callback.OnDialogClickListener;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private LoadingDialog loadingDialog;
private NoticeDialog noticeDialog;
private OneButtonDialog oneButtonDialog;
private SelectedProductDialog selectedProductDialog;
private BottomDialog bottomDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
MyOnDialogClickListener onDialogClickListener = new MyOnDialogClickListener();
loadingDialog = new LoadingDialog(this);
noticeDialog = new NoticeDialog(this).setOnDialogClickListener(onDialogClickListener);
bottomDialog = new BottomDialog(this).setOnDialogClickListener(onDialogClickListener);
oneButtonDialog = new OneButtonDialog(this).setOnDialogClickListener(onDialogClickListener);
selectedProductDialog = new SelectedProductDialog(this, findViewById(Window.ID_ANDROID_CONTENT)).setOnDialogClickListener(onDialogClickListener);
findViewById(R.id.bt_1).setOnClickListener(this);
findViewById(R.id.bt_2).setOnClickListener(this);
findViewById(R.id.bt_3).setOnClickListener(this);
findViewById(R.id.bt_4).setOnClickListener(this);
findViewById(R.id.bt_5).setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (R.id.bt_1 == view.getId()) {
loadingDialog.show();
} else if (R.id.bt_2 == view.getId()) {
noticeDialog.show();
} else if (R.id.bt_3 == view.getId()) {
selectedProductDialog.show();
} else if (R.id.bt_4 == view.getId()) {
bottomDialog.show();
} else if (R.id.bt_5 == view.getId()) {
oneButtonDialog.show();
}
}
private final class MyOnDialogClickListener implements OnDialogClickListener<SimpleDialog> {
@Override
public void onDialogClick(SimpleDialog dialog, @ClickPosition String clickPosition) {
//LogUtil.e("tag = " + dialog.tag + " clickPosition =" + clickPosition);
dialog.dismiss();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (loadingDialog != null) {
loadingDialog.destody();
}
loadingDialog = null;
if (noticeDialog != null) {
noticeDialog.destody();
}
noticeDialog = null;
if (oneButtonDialog != null) {
oneButtonDialog.destody();
}
oneButtonDialog = null;
if (selectedProductDialog != null) {
selectedProductDialog.destody();
}
selectedProductDialog = null;
if(bottomDialog!=null){
bottomDialog.destody();
}
bottomDialog = null;
}
}
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_bottom2top_in.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="100%"
android:fromXDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_bottom2top_out.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromXDelta="0"
android:fromYDelta="0"
android:toYDelta="100%"
android:toXDelta="0" >
</translate>
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_fade_in.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_fade_out.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_scale_in.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXScale="0.5"
android:fromYScale="0.5"
android:interpolator="@android:anim/overshoot_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="0"
android:repeatMode="restart"
android:startOffset="0"
android:toXScale="1.05"
android:toYScale="1.05" />
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_scale_out.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="0"
android:repeatMode="restart"
android:startOffset="0"
android:toXScale="0.00"
android:toYScale="0.00" />
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_top2bottom_in.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="-100%"
android:fromXDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
================================================
FILE: app/src/main/res/anim/alex_dialog_anim_top2bottom_out.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="0"
android:fromXDelta="0"
android:toXDelta="0"
android:toYDelta="-100%" >
</translate>
================================================
FILE: app/src/main/res/drawable/alex_dialog_layer_list_shadow_rectangle.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_1" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_2" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_3" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_4" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_5" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_6" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_7" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogShadowColor_8" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/alexDialogBodyColor" />
<corners android:radius="@dimen/alexDialogRadius" />
<padding
android:bottom="@dimen/alexDialogPadding"
android:left="@dimen/alexDialogPadding"
android:right="@dimen/alexDialogPadding"
android:top="@dimen/alexDialogPadding" />
</shape>
</item>
</layer-list>
================================================
FILE: app/src/main/res/drawable/layer_list_shadow_dialog_one_button.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_1" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_2" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_3" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_4" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_5" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_6" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_7" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/oneButtonDialogShadowColor_8" />
<corners android:radius="@dimen/oneButtonDialogRadius" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/oneButtonDialogRadius" />
<solid android:color="@color/oneButtonDialogBodyColor" />
<padding
android:bottom="@dimen/oneButtonDialogPaddingBottom"
android:left="@dimen/oneButtonDialogPaddingLeft"
android:right="@dimen/oneButtonDialogPaddingRight"
android:top="@dimen/oneButtonDialogPaddingTop" />
</shape>
</item>
</layer-list>
================================================
FILE: app/src/main/res/drawable/layer_list_shadow_rectangle.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_1" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_2" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_3" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_4" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_5" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_6" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_7" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/cardShadowColor_8" />
<corners android:radius="@dimen/cardRadius" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="3dp" />
<solid android:color="@color/cardBodyColor" />
<padding
android:bottom="@dimen/cardPaddingBottom"
android:left="@dimen/cardPaddingLeft"
android:right="@dimen/cardPaddingRight"
android:top="@dimen/cardPaddingTop" />
</shape>
</item>
</layer-list>
================================================
FILE: app/src/main/res/drawable/selector_dialog_one_button_submit.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#BBBBBB" />
<corners android:radius="4dp" />
</shape>
</item>
<item >
<shape android:shape="rectangle">
<solid android:color="#DDDDDD" />
<corners android:radius="4dp" />
</shape>
</item>
</selector>
================================================
FILE: app/src/main/res/layout/activity_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical"
tools:context=".ui.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/colorPrimary"
android:gravity="center"
android:text="对话框"
android:textColor="#FFFFFF"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/bt_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Loading"
android:textAllCaps="false"/>
<Button
android:id="@+id/bt_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="类 通知"
android:textAllCaps="false"/>
<Button
android:id="@+id/bt_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="仿 淘宝"
android:textAllCaps="false"/>
<Button
android:id="@+id/bt_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="底部 弹出"
android:textAllCaps="false"/>
<Button
android:id="@+id/bt_5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="普通的"
android:textAllCaps="false"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/dialog_loading.xml
================================================
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/alex_dialog_layer_list_shadow_rectangle"
android:padding="12dp">
<org.alex.sweeploadingview.SweepLoadingView
xmlns:SweepLoadingView="http://schemas.android.com/apk/res-auto"
android:id="@+id/slv"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerInParent="true"
SweepLoadingView:slv_circleColor="@color/alex_title_color"
SweepLoadingView:slv_circleWidth="4dp"
SweepLoadingView:slv_duration="800"
SweepLoadingView:slv_gapAngle="30"
SweepLoadingView:slv_strokeCap="round"/>
</RelativeLayout>
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/dialog_notice.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="wrap_content"
android:background="#FFFFFF"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/layout_body"
android:layout_width="match_parent"
android:layout_height="160dp"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="温馨提示"
android:textColor="#666666"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="您的智商余额不足,请及时充值"
android:textColor="#999999"
android:textSize="14sp" />
<TextView
android:id="@+id/tv_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="8dp"
android:layout_marginLeft="64dp"
android:background="@drawable/selector_dialog_one_button_submit"
android:clickable="true"
android:paddingBottom="4dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="4dp"
android:text="确定"
android:textColor="#333333"
android:textSize="14sp" />
<TextView
android:id="@+id/tv_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="8dp"
android:layout_marginRight="64dp"
android:background="@drawable/selector_dialog_one_button_submit"
android:clickable="true"
android:paddingBottom="4dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="4dp"
android:text="取消"
android:textColor="#333333"
android:textSize="14sp" />
</RelativeLayout>
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/dialog_one_button.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"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/layout_body"
android:layout_width="260dp"
android:layout_height="160dp"
android:layout_centerInParent="true"
android:background="@drawable/layer_list_shadow_dialog_one_button"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="温馨提示"
android:textColor="#666666"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="您的智商余额不足,请及时充值"
android:textColor="#999999"
android:textSize="14sp" />
<TextView
android:id="@+id/tv_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:clickable="true"
android:textColor="#333333"
android:textSize="14sp"
android:background="@drawable/selector_dialog_one_button_submit"
android:layout_centerHorizontal="true"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:layout_marginBottom="8dp"
android:text="确定" />
</RelativeLayout>
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/dialog_selected_product.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="wrap_content"
android:background="#FFFFFF"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/layout_body"
android:layout_width="match_parent"
android:layout_height="360dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="温馨提示"
android:textColor="#666666"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:lineSpacingMultiplier="1.5"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值;您的智商余额不足,请及时充值"
android:textColor="#999999"
android:textSize="14sp" />
<TextView
android:id="@+id/tv_submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="16dp"
android:layout_marginLeft="32dp"
android:layout_marginRight="32dp"
android:background="@drawable/selector_dialog_one_button_submit"
android:clickable="true"
android:gravity="center"
android:paddingBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:text="确定"
android:textColor="#333333"
android:textSize="14sp" />
</RelativeLayout>
</RelativeLayout>
================================================
FILE: app/src/main/res/values/alex_color.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="alex_item_layout">#FFFFFF</color>
<color name="alex_item_layout_press">#F7F7F7</color>
<color name="alex_item_layout_ripple">#E1E1E1</color>
<!--主布局的颜色,背景的主色调-->
<color name="alex_background_color">#EEEEEE</color>
<!-- 标题颜色 -->
<color name="alex_title_color">#FF5722</color>
</resources>
================================================
FILE: app/src/main/res/values/alex_dialog_anim_alpha_style.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="alex_dialog_anim_alpha" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/alex_dialog_anim_fade_in</item>
<item name="@android:windowExitAnimation">@anim/alex_dialog_anim_fade_out</item>
</style>
</resources>
================================================
FILE: app/src/main/res/values/alex_dialog_anim_bottom2top_style.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="alex_dialog_anim_bottom2top" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/alex_dialog_anim_bottom2top_in</item>
<item name="@android:windowExitAnimation">@anim/alex_dialog_anim_bottom2top_out</item>
</style>
</resources>
================================================
FILE: app/src/main/res/values/alex_dialog_anim_sacle_style.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="alex_dialog_anim_scale" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/alex_dialog_anim_scale_in</item>
<!-- <item name="@android:windowExitAnimation">@anim/alex_dialog_anim_scale_out</item> -->
</style>
</resources>
================================================
FILE: app/src/main/res/values/alex_dialog_anim_top2bottom_style.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="alex_dialog_anim_top2bottom" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/alex_dialog_anim_top2bottom_in</item>
<item name="@android:windowExitAnimation">@anim/alex_dialog_anim_top2bottom_out</item>
</style>
</resources>
================================================
FILE: app/src/main/res/values/alex_dialog_base_dim_style.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="alex_dialog_base_dim_style" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@null</item>
<item name="android:windowBackground">@null</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
</resources>
================================================
FILE: app/src/main/res/values/alex_dialog_base_light_style.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="alex_dialog_base_light_style" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@null</item>
<item name="android:windowBackground">@null</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
================================================
FILE: app/src/main/res/values/alex_dialog_shadow_color_radius.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="alexDialogBodyColor">#EEFFFFFF</color>
<color name="alexDialogShadowColor_1">#0a8c8c8c</color>
<color name="alexDialogShadowColor_2">#0f898989</color>
<color name="alexDialogShadowColor_3">#14898989</color>
<color name="alexDialogShadowColor_4">#19898989</color>
<color name="alexDialogShadowColor_5">#1e898989</color>
<color name="alexDialogShadowColor_6">#23898989</color>
<color name="alexDialogShadowColor_7">#28898989</color>
<color name="alexDialogShadowColor_8">#2d898989</color>
<dimen name="alexDialogPadding">1px</dimen>
<dimen name="alexDialogRadius">10dp</dimen>
</resources>
================================================
FILE: app/src/main/res/values/alex_dimens.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--顶部标题栏的 颜色-->
<dimen name="alex_title_height">48dp</dimen>
<!--顶部标题栏的 标题字体大小-->
<dimen name="alex_title_text_size">20sp</dimen>
</resources>
================================================
FILE: app/src/main/res/values/alex_string.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="alex_digits_pwd" >_0123456789abcdefghigjklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</string>
</resources>
================================================
FILE: app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
================================================
FILE: app/src/main/res/values/dimens.xml
================================================
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>
================================================
FILE: app/src/main/res/values/shadow_color_radius.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="cardBodyColor">#FFFFFF</color>
<color name="cardShadowColor_1">#0a8c8c8c</color>
<color name="cardShadowColor_2">#0f898989</color>
<color name="cardShadowColor_3">#14898989</color>
<color name="cardShadowColor_4">#19898989</color>
<color name="cardShadowColor_5">#1e898989</color>
<color name="cardShadowColor_6">#23898989</color>
<color name="cardShadowColor_7">#28898989</color>
<color name="cardShadowColor_8">#2d898989</color>
<dimen name="cardPaddingLeft">0px</dimen>
<dimen name="cardPaddingTop">0px</dimen>
<dimen name="cardPaddingRight">0px</dimen>
<dimen name="cardPaddingBottom">1px</dimen>
<dimen name="cardRadius">0dp</dimen>
</resources>
================================================
FILE: app/src/main/res/values/shadow_color_radius_dialog_one_button.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="oneButtonDialogBodyColor">#EEFFFFFF</color>
<color name="oneButtonDialogShadowColor_1">#0a8c8c8c</color>
<color name="oneButtonDialogShadowColor_2">#0f898989</color>
<color name="oneButtonDialogShadowColor_3">#14898989</color>
<color name="oneButtonDialogShadowColor_4">#19898989</color>
<color name="oneButtonDialogShadowColor_5">#1e898989</color>
<color name="oneButtonDialogShadowColor_6">#23898989</color>
<color name="oneButtonDialogShadowColor_7">#28898989</color>
<color name="oneButtonDialogShadowColor_8">#2d898989</color>
<dimen name="oneButtonDialogPaddingLeft">1px</dimen>
<dimen name="oneButtonDialogPaddingTop">1px</dimen>
<dimen name="oneButtonDialogPaddingRight">1px</dimen>
<dimen name="oneButtonDialogPaddingBottom">1px</dimen>
<dimen name="oneButtonDialogRadius">8dp</dimen>
</resources>
================================================
FILE: app/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">Dialog</string>
</resources>
================================================
FILE: app/src/main/res/values/styles.xml
================================================
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
================================================
FILE: app/src/main/res/values-w820dp/dimens.xml
================================================
<resources>
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
(such as screen margins) for screens with more than 820dp of available width. This
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
<dimen name="activity_horizontal_margin">64dp</dimen>
</resources>
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
ext {
compileSdkVersion = 25
buildToolsVersion = "25.0.0"
minSdkVersion = 16
targetSdkVersion = 21
libs = [
appcompat_v7: 'com.android.support:appcompat-v7:25.0.1',
design : 'com.android.support:design:25.0.1',
recyclerview: 'com.android.support:recyclerview-v7:25.0.1',
]
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: dialog/.gitignore
================================================
/build
================================================
FILE: dialog/build.gradle
================================================
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
Map<String, String> libs = rootProject.ext.libs
compile libs.appcompat_v7
}
================================================
FILE: dialog/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in E:\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: dialog/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.alex.dialog">
<application android:allowBackup="true" android:label="@string/app_name"
android:supportsRtl="true">
</application>
</manifest>
================================================
FILE: dialog/src/main/java/org/alex/dialog/anim/BaseAnimatorSet.java
================================================
package org.alex.dialog.anim;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.view.View;
import android.view.animation.Interpolator;
/**
* 作者:Alex
* 时间:2016年09月10日 12:58
* 简述:
*/
public abstract class BaseAnimatorSet {
/**
* 动画时长,系统默认250
*/
protected long duration = 500;
protected AnimatorSet animatorSet = new AnimatorSet();
private Interpolator interpolator;
private long delay;
private AnimatorListener listener;
public abstract void setAnimation(View view);
protected void start(final View view) {
/** 设置动画中心点:pivotX--->X轴方向动画中心点,pivotY--->Y轴方向动画中心点 */
// ViewHelper.setPivotX(view, view.getMeasuredWidth() / 2.0f);
// ViewHelper.setPivotY(view, view.getMeasuredHeight() / 2.0f);
reset(view);
setAnimation(view);
animatorSet.setDuration(duration);
if (interpolator != null) {
animatorSet.setInterpolator(interpolator);
}
if (delay > 0) {
animatorSet.setStartDelay(delay);
}
if (listener != null) {
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
listener.onAnimationStart(animator);
}
@Override
public void onAnimationRepeat(Animator animator) {
listener.onAnimationRepeat(animator);
}
@Override
public void onAnimationEnd(Animator animator) {
listener.onAnimationEnd(animator);
}
@Override
public void onAnimationCancel(Animator animator) {
listener.onAnimationCancel(animator);
}
});
}
animatorSet.start();
}
public static void reset(View view) {
view.setAlpha(1);
view.setScaleX(1);
view.setScaleY(1);
view.setTranslationX(0);
view.setTranslationY(0);
view.setRotation(0);
view.setRotationY(0);
view.setRotationX(0);
}
/**
* 设置动画时长
*/
public BaseAnimatorSet duration(long duration) {
this.duration = duration;
return this;
}
/**
* 设置动画时长
*/
public BaseAnimatorSet delay(long delay) {
this.delay = delay;
return this;
}
/**
* 设置动画插补器
*/
public BaseAnimatorSet interpolator(Interpolator interpolator) {
this.interpolator = interpolator;
return this;
}
/**
* 动画监听
*/
public BaseAnimatorSet listener(AnimatorListener listener) {
this.listener = listener;
return this;
}
/**
* 在View上执行动画
*/
public void playOn(View view) {
start(view);
}
public interface AnimatorListener {
void onAnimationStart(Animator animator);
void onAnimationRepeat(Animator animator);
void onAnimationEnd(Animator animator);
void onAnimationCancel(Animator animator);
}
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/annotation/AnimType.java
================================================
package org.alex.dialog.annotation;
import android.support.annotation.IntDef;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 作者:Alex
* <br/>
* 时间:2016/9/5 18:05
* <br/>
* 简述:
*/
@SuppressWarnings("all")
@Documented
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.SOURCE)
@Inherited
@IntDef(value = {
AnimType.CENTER_NORMAL,
AnimType.CENTER_SCALE,
AnimType.BOTTOM_2_TOP,
AnimType.TOP_2_BOTTOM
})
public @interface AnimType {
/**
* 居中 无效果
*/
public static final int CENTER_NORMAL = 0;
/**
* 居中缩放
* 进入:居中,由小变大
* 退出:居中,由大变小
*/
public static final int CENTER_SCALE = 1;
/**
* 底部进入
* 进入:从底部,到顶部
* 退出:从顶部,到底部
*/
public static final int BOTTOM_2_TOP = 2;
/**
* 顶部进入
* 进入:从顶部,到底部
* 退出:从底部,到顶部
*/
public static final int TOP_2_BOTTOM = 3;
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/annotation/ClickPosition.java
================================================
package org.alex.dialog.annotation;
import android.support.annotation.StringDef;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 作者:Alex
* <br/>
* 时间:2016/9/5 17:59
* <br/>
* 简述:
*/
@SuppressWarnings("all")
@Documented
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.SOURCE)
@Inherited
@StringDef(value = {
ClickPosition.LEFT,
ClickPosition.TOP,
ClickPosition.RIGHT,
ClickPosition.BOTTOM,
ClickPosition.CENTER,
ClickPosition.SUBMIT,
ClickPosition.CANCEL,
ClickPosition.OPEN,
ClickPosition.CLOSE,
ClickPosition.AGREE,
ClickPosition.REFUSE,
ClickPosition.ACCEPT,
ClickPosition.UPDATE,
ClickPosition.DELETE,
ClickPosition.ALTER,
ClickPosition.FORGET,
ClickPosition.IGNORE,
ClickPosition.STOP,
ClickPosition.SEND
})
public @interface ClickPosition {
/**
* 左按钮
*/
public static final String LEFT = "LEFT";
/**
* 顶部按钮
*/
public static final String TOP = "TOP";
/**
* 右按钮
*/
public static final String RIGHT = "RIGHT";
/**
* 底部按钮
*/
public static final String BOTTOM = "BOTTOM";
/**
* 中间按钮
*/
public static final String CENTER = "CENTER";
/**
* 确定按钮
*/
public static final String SUBMIT = "SUBMIT";
/**
* 取消按钮
*/
public static final String CANCEL = "CANCEL";
/**
* 关闭按钮
*/
public static final String CLOSE = "CLOSE";
/**
* 打开按钮
*/
public static final String OPEN = "OPEN";
/**
* 同意按钮
*/
public static final String AGREE = "AGREE";
/**
* 拒绝按钮
*/
public static final String REFUSE = "REFUSE";
/**
* 接受按钮
*/
public static final String ACCEPT = "ACCEPT";
/**
* 升级按钮
*/
public static final String UPDATE = "UPDATE";
/**
* 删除按钮
*/
public static final String DELETE = "DELETE";
/**
* 修改按钮
*/
public static final String ALTER = "ALTER";
/**
* 忘记按钮
*/
public static final String FORGET = "FORGET";
/**
* 忽略按钮
*/
public static final String IGNORE = "IGNORE";
/**
* 停止按钮
*/
public static final String STOP = "STOP";
/**
* 发送按钮
*/
public static final String SEND = "SEND";
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/annotation/OnKeyType.java
================================================
package org.alex.dialog.annotation;
import android.support.annotation.IntDef;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 作者:Alex
* <br/>
* 时间:2016/9/5 18:05
* <br/>
* 简述:
*/
@SuppressWarnings("all")
@Documented
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.SOURCE)
@Inherited
@IntDef(value = {OnKeyType.DISMISS_KILL_ACTIVITY, OnKeyType.DISMISS_NOT_KILL_ACTIVITY, OnKeyType.NOT_DISMISS_NOT_KILL_ACTIVITY})
public @interface OnKeyType {
/**
* 隐藏对话框 - 结束Activity
*/
public static final int DISMISS_KILL_ACTIVITY = 0;
/**
* 隐藏对话框 - 不结束Activity
*/
public static final int DISMISS_NOT_KILL_ACTIVITY = 1;
/**
* 不隐藏对话框 - 不结束Activity
*/
public static final int NOT_DISMISS_NOT_KILL_ACTIVITY = 2;
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/base/BaseDialog.java
================================================
package org.alex.dialog.base;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;
import org.alex.dialog.annotation.AnimType;
import org.alex.dialog.annotation.ClickPosition;
import org.alex.dialog.callback.OnDialogClickListener;
import org.alex.dialog.callback.SimpleOnKeyListener;
import org.alex.dialog.helper.OnClickHelper;
import org.alex.dialog.util.StatusBarUtils;
/**
* 作者:Alex
* 时间:2016年09月10日 15:20
* 简述:
*/
@SuppressWarnings("all")
public abstract class BaseDialog<D extends BaseDialog> extends Dialog implements View.OnClickListener {
/**
* 对话框 根视图
*/
protected View rootView;
/**
* dialog width scale(宽度比例)
*/
protected float scaleWidth = 1;
/**
* dialog height scale(高度比例)
*/
protected float scaleHeight;
/**
* max height(最大高度)
*/
protected float maxHeight;
/**
* (DisplayMetrics)设备密度
*/
protected DisplayMetrics displayMetrics;
protected Context context;
protected int gravity;
protected int animType;
/**
* Dialog的标记
*/
public Object tag;
public OnDialogClickListener onDialogClickListener;
/**
* Creates a dialog window that uses the default dialog theme.
* <p>
* The supplied {@code context} is used to obtain the window manager and
* base theme used to present the dialog.
*
* @param context the context in which the dialog should run
* @see android.R.styleable#Theme_dialogTheme
*/
public BaseDialog(Context context) {
super(context);
this.context = context;
initBaseDialogTheme();
initDialog();
}
public BaseDialog(Context context, int theme) {
super(context, theme);
this.context = context;
initBaseDialogTheme();
initDialog();
}
protected void initDialog() {
displayMetrics = getContext().getResources().getDisplayMetrics();
maxHeight = displayMetrics.heightPixels - StatusBarUtils.getHeight(context);
rootView = LayoutInflater.from(getContext()).inflate(getLayoutRes(), null);
tag = getClass().getSimpleName();
setContentView(rootView);
setCanceledOnTouchOutside(false);
OnClickHelper.getInstance().onBindClickListener(rootView, this);
onCreateData();
}
/**
* 配置 对话框的 布局文件
*/
@LayoutRes
public abstract int getLayoutRes();
/**
* 在 这里 进行 findView 设置点击事件
*/
public abstract void onCreateData();
public D tag(@NonNull Object tag) {
if (tag != null) {
this.tag = tag;
}
return (D) this;
}
public Object tag() {
return tag;
}
/**
* 设置监听器
*/
public D setOnDialogClickListener(OnDialogClickListener onDialogClickListener) {
this.onDialogClickListener = onDialogClickListener;
return (D) this;
}
/**
* 销毁一切资源
*/
public void destody() {
super.dismiss();
context = null;
rootView.destroyDrawingCache();
rootView = null;
displayMetrics = null;
onDialogClickListener = null;
}
/**
* 设置 对话框 高度比 (0, 1]
*/
public D setScaleHeight(float scaleHeight) {
this.scaleHeight = scaleHeight;
return (D) this;
}
/**
* 设置 对话框 宽度比 (0, 1]
*/
public D setScaleWidth(float scaleWidth) {
this.scaleWidth = scaleWidth;
return (D) this;
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
int width;
if (scaleWidth == 0) {
width = ViewGroup.LayoutParams.WRAP_CONTENT;
} else {
width = (int) (displayMetrics.widthPixels * scaleWidth);
}
int height;
if (scaleHeight == 0) {
height = ViewGroup.LayoutParams.WRAP_CONTENT;
} else if (scaleHeight == 1) {
height = ViewGroup.LayoutParams.MATCH_PARENT;
} else {
height = (int) (maxHeight * scaleHeight);
}
rootView.setLayoutParams(new FrameLayout.LayoutParams(width, height));
}
/**
* set dialog theme(设置对话框主题)
*/
protected void initBaseDialogTheme() {
animType = AnimType.CENTER_NORMAL;
/*android:windowNoTitle*/
requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = getWindow();
/* android:windowBackground*/
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
/*android:backgroundDimEnabled默认是true的*/
//window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
public <T extends View> T findView(@IdRes int id) {
return (T) rootView.findViewById(id);
}
public D setText(@IdRes int id, @NonNull String text) {
View view = findView(id);
setText(view, text);
return (D) this;
}
public D setText(@NonNull View view, @NonNull String text) {
if ((view == null) || (text == null)) {
return (D) this;
}
if (view instanceof TextView) {
((TextView) view).setText(text);
}
if (view instanceof EditText) {
((EditText) view).setSelection(text.length());
}
return (D) this;
}
public D setOnCilckListener(@IdRes int id) {
View view = findView(id);
if (view == null) {
return (D) this;
}
view.setOnClickListener(this);
return (D) this;
}
public D setOnCilckListener(@IdRes int... id) {
for (int i = 0; (id != null) && (i < id.length); i++) {
setOnCilckListener(id[i]);
}
return (D) this;
}
/**
* 处理按钮点击事件 并绑定 onDialogClickListener
*/
@Override
public void onClick(View v) {
onClick(v, v.getId());
}
/**
* 处理按钮点击事件 并绑定 onDialogClickListener
*/
public abstract void onClick(View v, int id);
public void onDialogClickListener(@ClickPosition String clickPosition) {
if (onDialogClickListener != null) {
onDialogClickListener.onDialogClick((D) this, clickPosition);
}
}
/**
* 设置 物理按键的 监听事件
*
* @param simpleOnKeyListener
*/
public D setOnKeyListener(SimpleOnKeyListener simpleOnKeyListener) {
super.setOnKeyListener(simpleOnKeyListener);
return (D) this;
}
/**
* 设置对话框的显示位置
*/
public D setGravity(int gravity) {
this.gravity = gravity;
Window dialogWindow = getWindow();
dialogWindow.setGravity(gravity);
return (D) this;
}
/**
* 设置对话框的显示位置,以及Y轴的向下偏移量(单位 dp)
*/
public D setGravity(int gravity, int yDP) {
this.gravity = gravity;
Window dialogWindow = getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.x = 0;
lp.y = (int) (yDP * context.getResources().getDisplayMetrics().density);
dialogWindow.setGravity(gravity);
return (D) this;
}
public D setAnimType(@AnimType int animType) {
this.animType = animType;
/*如果根据 AnimType 的类型,强制选择Dialog出现的位置*/
if (AnimType.BOTTOM_2_TOP == animType) {
setGravity(Gravity.BOTTOM);
} else if (AnimType.TOP_2_BOTTOM == animType) {
setGravity(Gravity.TOP);
} else if (AnimType.CENTER_SCALE == animType) {
setGravity(Gravity.CENTER);
} else if (AnimType.CENTER_NORMAL == animType) {
setGravity(Gravity.CENTER);
}
return (D) this;
}
private void attachView(View view) {
int[] position = new int[2];
view.getLocationInWindow(position);
Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
window.setGravity(Gravity.LEFT | Gravity.TOP);
params.x = position[0] + getViewWidth(view) / 2;
params.y = position[1] + getViewHeight(view) / 2;
window.setAttributes(params);
}
/**
* 测量这个view
* 最后通过getMeasuredWidth()获取宽度和高度.
*
* @param view 要测量的view
* @return 测量过的view
*/
private void measureView(View view) {
ViewGroup.LayoutParams p = view.getLayoutParams();
if (p == null) {
p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0, p.width);
int lpHeight = p.height;
int childHeightSpec;
if (lpHeight > 0) {
childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY);
} else {
childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
}
view.measure(childWidthSpec, childHeightSpec);
}
/**
* 获得这个View的宽度
* 测量这个view,最后通过getMeasuredWidth()获取宽度.
*
* @param view 要测量的view
* @return 测量过的view的宽度
*/
protected int getViewWidth(View view) {
measureView(view);
return view.getMeasuredWidth();
}
/**
* 获得这个View的高度
* 测量这个view,最后通过getMeasuredHeight()获取高度.
*
* @param view 要测量的view
* @return 测量过的view的高度
*/
protected int getViewHeight(View view) {
measureView(view);
return view.getMeasuredHeight();
}
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/callback/OnDialogClickListener.java
================================================
package org.alex.dialog.callback;
import android.app.Dialog;
import org.alex.dialog.annotation.ClickPosition;
/**
* 作者:Alex
* 时间:2016年09月03日 21:29
* 简述:
*/
@SuppressWarnings("all")
public interface OnDialogClickListener<D extends Dialog>
{
public void onDialogClick(D dialog, @ClickPosition String clickPosition);
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/callback/OnWait2DismissListener.java
================================================
package org.alex.dialog.callback;
import android.app.Dialog;
/**
* 作者:Alex
* 时间:2016年09月03日 21:29
* 简述:
*/
@SuppressWarnings("all")
public interface OnWait2DismissListener<D extends Dialog> {
/**
* @param second 为零的时候 对话框结束
*/
public void onDismiss(D dialog, int second);
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/callback/SimpleOnKeyListener.java
================================================
package org.alex.dialog.callback;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnKeyListener;
import android.view.KeyEvent;
import org.alex.dialog.annotation.OnKeyType;
/**
* 作者:Alex
* 时间:2016年09月03日 21:29
* 简述:
*/
@SuppressWarnings("all")
public class SimpleOnKeyListener implements OnKeyListener {
private Activity activity;
private int onKeyType;
public SimpleOnKeyListener(Activity activity, @OnKeyType int onKeyType) {
this.onKeyType = onKeyType;
this.activity = activity;
}
public static SimpleOnKeyListener dismissNotKillActivity(Activity activity) {
return new SimpleOnKeyListener(activity, OnKeyType.DISMISS_NOT_KILL_ACTIVITY);
}
public static SimpleOnKeyListener dismissKillActivity(Activity activity) {
return new SimpleOnKeyListener(activity, OnKeyType.DISMISS_KILL_ACTIVITY);
}
public static SimpleOnKeyListener notDismissNotKillActivity(Activity activity) {
return new SimpleOnKeyListener(activity, OnKeyType.NOT_DISMISS_NOT_KILL_ACTIVITY);
}
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (OnKeyType.DISMISS_KILL_ACTIVITY == onKeyType) {
dialog.dismiss();
activity.finish();
} else if (OnKeyType.DISMISS_NOT_KILL_ACTIVITY == onKeyType) {
dialog.dismiss();
} else if (OnKeyType.NOT_DISMISS_NOT_KILL_ACTIVITY == onKeyType) {
}
}
return true;
}
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/helper/OnClickHelper.java
================================================
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.alex.dialog.helper;
import android.support.annotation.NonNull;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
public class OnClickHelper {
private static OnClickHelper OnClickHelper;
private OnClickHelper() {
}
public static OnClickHelper getInstance() {
if(OnClickHelper == null) {
Class var0 = OnClickHelper.class;
synchronized(OnClickHelper.class) {
OnClickHelper = OnClickHelper == null?new OnClickHelper():OnClickHelper;
}
}
return OnClickHelper;
}
public void onBindClickListener(@NonNull View contentView, @NonNull OnClickListener onClickListener) {
this.setOnClickListener(contentView, onClickListener);
}
private void setOnClickListener(@NonNull View view, @NonNull OnClickListener onClickListener) {
if(view == null) {
//LogUtil.w("控件为空");
} else {
view.setOnClickListener(onClickListener);
if(view instanceof ViewGroup) {
this.setOnClickListener((ViewGroup)view, onClickListener);
}
}
}
private void setOnClickListener(@NonNull ViewGroup viewGroup, @NonNull OnClickListener onClickListener) {
try {
viewGroup.setOnClickListener(onClickListener);
for(int e = 0; e < viewGroup.getChildCount(); ++e) {
View v = viewGroup.getChildAt(e);
if(v instanceof ViewGroup) {
this.setOnClickListener((ViewGroup)v, onClickListener);
} else if(v != null && v instanceof View) {
v.setOnClickListener(onClickListener);
}
}
} catch (Exception var5) {
//LogUtil.e(var5);
}
}
}
================================================
FILE: dialog/src/main/java/org/alex/dialog/util/StatusBarUtils.java
================================================
package org.alex.dialog.util;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
/**
* 作者:Alex
* 时间:2016年09月03日 21:29
* 简述:
*/
@SuppressWarnings("all")
public class StatusBarUtils {
public static int getHeight(Context context) {
int statusBarHeight = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);
}
Log.d(StatusBarUtils.class.getSimpleName(), "statusBarHeight--->" + statusBarHeight);
if (isFlymeOs4x()) {
return 2 * statusBarHeight;
}
return statusBarHeight;
}
public static boolean isFlymeOs4x() {
String sysVersion = android.os.Build.VERSION.RELEASE;
if ("4.4.4".equals(sysVersion)) {
String sysIncrement = android.os.Build.VERSION.INCREMENTAL;
String displayId = android.os.Build.DISPLAY;
if (!TextUtils.isEmpty(sysIncrement)) {
return sysIncrement.contains("Flyme_OS_4");
} else {
return displayId.contains("Flyme OS 4");
}
}
return false;
}
}
================================================
FILE: dialog/src/main/res/values/alex_theme_no_title_app.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="alex_theme_no_title" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
================================================
FILE: dialog/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">Dialog</string>
</resources>
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
================================================
FILE: gradlew
================================================
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle
================================================
include ':app', ':dialog', ':sweeploadingview'
================================================
FILE: sweeploadingview/.gitignore
================================================
/build
================================================
FILE: sweeploadingview/build.gradle
================================================
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
Map<String, String> libs = rootProject.ext.libs
compile libs.appcompat_v7
}
================================================
FILE: sweeploadingview/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in E:\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: sweeploadingview/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.alex.sweeploadingview">
<application android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
>
</application>
</manifest>
================================================
FILE: sweeploadingview/src/main/java/org/alex/callback/SimpleAnimatorListener.java
================================================
package org.alex.callback;
import android.animation.Animator;
/**
* 作者:Alex
* 时间:2016年09月03日 10:06
* 简述:
*/
@SuppressWarnings("all")
public abstract class SimpleAnimatorListener implements Animator.AnimatorListener {
@Override
public void onAnimationStart(Animator animation){
}
@Override
public void onAnimationEnd(Animator animation){
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
}
================================================
FILE: sweeploadingview/src/main/java/org/alex/sweeploadingview/SweepLoadingView.java
================================================
package org.alex.sweeploadingview;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.RectF;
import android.support.annotation.ColorInt;
import android.support.annotation.FloatRange;
import android.util.AttributeSet;
import android.util.Property;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import org.alex.callback.SimpleAnimatorListener;
/**
* 作者:Alex
* <br/>
* 时间:2016/8/24 16:31
* <br/>
* 博客地址:http://www.jianshu.com/users/c3c4ea133871/subscriptions
* <br/>
* <br/>
*/
@SuppressWarnings("all")
public class SweepLoadingView extends View {
private RectF rectF;
private Paint paint;
private int circleColor;
private int circleWidth;
private int strokeCap;
/**
* 扫描一周 需要的时间
*/
private int swipeDuration;
/**
* 起点的角度
*/
private float startAngle;
/**
* 扫描的角度
*/
private float sweepAngle;
/**
* 终点 和 起点的间隔 角度
*/
private float gapAngle;
/**
* 起始点的偏移量
*/
private float startAngleOffset;
private ObjectAnimator sweepObjectAnimator;
private ObjectAnimator startAngleObjectAnimator;
/**
* 扫描一周
*/
private boolean isSweepRepeat;
public SweepLoadingView(Context context) {
super(context);
initView(null);
}
public SweepLoadingView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(attrs);
}
private void initView(AttributeSet attrs) {
startAngleOffset = 0;
isSweepRepeat = false;
Context context = getContext();
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SweepLoadingView);
circleWidth = typedArray.getDimensionPixelSize(R.styleable.SweepLoadingView_slv_circleWidth, 0);
circleColor = typedArray.getColor(R.styleable.SweepLoadingView_slv_circleColor, Color.parseColor("#FF5722"));
strokeCap = typedArray.getInt(R.styleable.SweepLoadingView_slv_strokeCap, 0);
swipeDuration = typedArray.getInt(R.styleable.SweepLoadingView_slv_duration, 1200);
gapAngle = typedArray.getFloat(R.styleable.SweepLoadingView_slv_gapAngle, 45F);
rectF = new RectF();
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.STROKE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setStrokeCap((strokeCap == 0) ? Paint.Cap.ROUND : Paint.Cap.SQUARE);
paint.setStrokeWidth(circleWidth);
paint.setColor(circleColor);
initObjectAnimation();
}
private void initObjectAnimation() {
sweepObjectAnimator = ObjectAnimator.ofFloat(this, new AngleProperty(Float.class, "sweepAngle"), 360F - gapAngle * 2);
sweepObjectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
sweepObjectAnimator.setDuration(swipeDuration);
sweepObjectAnimator.setRepeatCount(Integer.MAX_VALUE);
sweepObjectAnimator.setRepeatMode(ValueAnimator.RESTART);
sweepObjectAnimator.addListener(new SweepAngleAnimatorListener());
startAngleObjectAnimator = ObjectAnimator.ofFloat(this, new AngleProperty(Float.class, "startAngle"), 360F);
startAngleObjectAnimator.setInterpolator(new LinearInterpolator());
startAngleObjectAnimator.setDuration(1500);
startAngleObjectAnimator.setRepeatCount(Integer.MAX_VALUE);
startAngleObjectAnimator.setRepeatMode(ValueAnimator.RESTART);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int min = Math.min(w, h);
int dWidth = circleWidth / 2;
rectF.left = dWidth;
rectF.right = min - dWidth;
rectF.top = dWidth;
rectF.bottom = min - dWidth;
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));
float startAngle = this.startAngle - startAngleOffset;
float sweepAngle = this.sweepAngle;
if (isSweepRepeat) {
startAngle += sweepAngle;
sweepAngle = 360 - sweepAngle - gapAngle;
} else {
sweepAngle += gapAngle;
}
canvas.drawArc(rectF, startAngle, sweepAngle, false, paint);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
startSweepAnimation();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
stopSweepAnimation();
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (visibility == VISIBLE) {
startSweepAnimation();
} else {
stopSweepAnimation();
}
}
private void startSweepAnimation() {
if (!sweepObjectAnimator.isStarted()) {
//LogUtil.e("开始");
sweepObjectAnimator.start();
}
if (!startAngleObjectAnimator.isStarted()) {
startAngleObjectAnimator.start();
}
}
private void stopSweepAnimation() {
//LogUtil.e("停止");
sweepObjectAnimator.cancel();
startAngleObjectAnimator.cancel();
}
private final class SweepAngleAnimatorListener extends SimpleAnimatorListener {
@Override
public void onAnimationRepeat(Animator animation) {
handleSweepRepeat();
}
}
/**
* 处理扫描一周的 情况
*/
private void handleSweepRepeat() {
if (isSweepRepeat) {
startAngleOffset = (startAngleOffset + gapAngle * 2) % 360;
}
isSweepRepeat = !isSweepRepeat;
}
private final class AngleProperty extends Property<SweepLoadingView, Float> {
private String name;
public AngleProperty(Class<Float> type, String name) {
super(type, name);
this.name = name;
}
@Override
public Float get(SweepLoadingView object) {
if ("sweepAngle".equals(name)) {
return object.getSweepAngle();
} else {
return object.getStartAngle();
}
}
@Override
public void set(SweepLoadingView object, Float value) {
if ("sweepAngle".equals(name)) {
object.setSweepAngle(value);
} else {
object.setStartAngle(value);
}
}
}
private float getSweepAngle() {
return sweepAngle;
}
private void setSweepAngle(float sweepAngle) {
this.sweepAngle = sweepAngle;
invalidate();
}
private float getStartAngle() {
return startAngle;
}
private void setStartAngle(float startAngle) {
this.startAngle = startAngle;
invalidate();
}
private void setCircleColor(@ColorInt int color) {
this.circleColor = color;
invalidate();
}
private void setCircleWidth(int width) {
if (width < 1) {
width = 4;
}
width = (int) dp2Px(width);
this.circleWidth = width;
invalidate();
}
private void setGapAngle(@FloatRange(from = 5F, to = 60F) float angle) {
if ((angle < 5) || (angle > 60)) {
angle = 45F;
}
this.gapAngle = angle;
invalidate();
}
/**
* 数据转换: dp---->px
*/
private float dp2Px(float dp) {
return dp * getContext().getResources().getDisplayMetrics().density;
}
}
================================================
FILE: sweeploadingview/src/main/res/values/alex_sweep_loading_view_attrs.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="SweepLoadingView">
<!-- 加载环的颜色 -->
<attr name="slv_circleColor" format="color"/>
<!-- 加载环的宽度 -->
<attr name="slv_circleWidth" format="dimension"/>
<!-- 较大弧度环 转一圈 需要的时间 -->
<attr name="slv_duration" format="integer"/>
<!-- 终点 和 起点的间隔 角度 -->
<attr name="slv_gapAngle" format="float"/>
<!--右按钮 的 功能 枚举-->
<attr name="slv_strokeCap" format="enum">
<!--两端 是 半圆形-->
<enum name="round" value="0"/>
<!--两端 是 矩形-->
<enum name="square" value="1"/>
</attr>
</declare-styleable>
</resources>
================================================
FILE: sweeploadingview/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">SweepLoadingView</string>
</resources>
gitextract_tkf2eqbg/
├── .gitignore
├── .idea/
│ ├── compiler.xml
│ ├── copyright/
│ │ └── profiles_settings.xml
│ ├── encodings.xml
│ ├── gradle.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── runConfigurations.xml
│ └── vcs.xml
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── alex/
│ │ └── dialogdemo/
│ │ ├── App.java
│ │ ├── dialog/
│ │ │ ├── BottomDialog.java
│ │ │ ├── LoadingDialog.java
│ │ │ ├── NoticeDialog.java
│ │ │ ├── OneButtonDialog.java
│ │ │ ├── SelectedProductDialog.java
│ │ │ └── base/
│ │ │ ├── Bottom2TopDialog.java
│ │ │ ├── CenterNormalDialog.java
│ │ │ ├── CenterScaleDialog.java
│ │ │ ├── SimpleDialog.java
│ │ │ ├── TaoBaoDialog.java
│ │ │ └── Top2BottomDialog.java
│ │ └── ui/
│ │ └── MainActivity.java
│ └── res/
│ ├── anim/
│ │ ├── alex_dialog_anim_bottom2top_in.xml
│ │ ├── alex_dialog_anim_bottom2top_out.xml
│ │ ├── alex_dialog_anim_fade_in.xml
│ │ ├── alex_dialog_anim_fade_out.xml
│ │ ├── alex_dialog_anim_scale_in.xml
│ │ ├── alex_dialog_anim_scale_out.xml
│ │ ├── alex_dialog_anim_top2bottom_in.xml
│ │ └── alex_dialog_anim_top2bottom_out.xml
│ ├── drawable/
│ │ ├── alex_dialog_layer_list_shadow_rectangle.xml
│ │ ├── layer_list_shadow_dialog_one_button.xml
│ │ ├── layer_list_shadow_rectangle.xml
│ │ └── selector_dialog_one_button_submit.xml
│ ├── layout/
│ │ ├── activity_main.xml
│ │ ├── dialog_loading.xml
│ │ ├── dialog_notice.xml
│ │ ├── dialog_one_button.xml
│ │ └── dialog_selected_product.xml
│ ├── values/
│ │ ├── alex_color.xml
│ │ ├── alex_dialog_anim_alpha_style.xml
│ │ ├── alex_dialog_anim_bottom2top_style.xml
│ │ ├── alex_dialog_anim_sacle_style.xml
│ │ ├── alex_dialog_anim_top2bottom_style.xml
│ │ ├── alex_dialog_base_dim_style.xml
│ │ ├── alex_dialog_base_light_style.xml
│ │ ├── alex_dialog_shadow_color_radius.xml
│ │ ├── alex_dimens.xml
│ │ ├── alex_string.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── shadow_color_radius.xml
│ │ ├── shadow_color_radius_dialog_one_button.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp/
│ └── dimens.xml
├── build.gradle
├── dialog/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── org/
│ │ └── alex/
│ │ └── dialog/
│ │ ├── anim/
│ │ │ └── BaseAnimatorSet.java
│ │ ├── annotation/
│ │ │ ├── AnimType.java
│ │ │ ├── ClickPosition.java
│ │ │ └── OnKeyType.java
│ │ ├── base/
│ │ │ └── BaseDialog.java
│ │ ├── callback/
│ │ │ ├── OnDialogClickListener.java
│ │ │ ├── OnWait2DismissListener.java
│ │ │ └── SimpleOnKeyListener.java
│ │ ├── helper/
│ │ │ └── OnClickHelper.java
│ │ └── util/
│ │ └── StatusBarUtils.java
│ └── res/
│ └── values/
│ ├── alex_theme_no_title_app.xml
│ └── strings.xml
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── sweeploadingview/
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src/
└── main/
├── AndroidManifest.xml
├── java/
│ └── org/
│ └── alex/
│ ├── callback/
│ │ └── SimpleAnimatorListener.java
│ └── sweeploadingview/
│ └── SweepLoadingView.java
└── res/
└── values/
├── alex_sweep_loading_view_attrs.xml
└── strings.xml
SYMBOL INDEX (158 symbols across 21 files)
FILE: app/src/main/java/com/alex/dialogdemo/dialog/BottomDialog.java
class BottomDialog (line 17) | public class BottomDialog extends Bottom2TopDialog<BottomDialog> {
method BottomDialog (line 18) | public BottomDialog(Context context) {
method getLayoutRes (line 22) | @Override
method onCreateData (line 27) | @Override
method onClick (line 32) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/LoadingDialog.java
class LoadingDialog (line 14) | @SuppressWarnings("all")
method LoadingDialog (line 18) | public LoadingDialog(Context context) {
method getLayoutRes (line 25) | @Override
method onCreateData (line 33) | @Override
method onClick (line 39) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/NoticeDialog.java
class NoticeDialog (line 16) | public class NoticeDialog extends Top2BottomDialog<NoticeDialog> {
method NoticeDialog (line 17) | public NoticeDialog(Context context) {
method getLayoutRes (line 21) | @Override
method onCreateData (line 26) | @Override
method onClick (line 31) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/OneButtonDialog.java
class OneButtonDialog (line 17) | public class OneButtonDialog extends CenterScaleDialog<OneButtonDialog> {
method OneButtonDialog (line 19) | public OneButtonDialog(Context context) {
method getLayoutRes (line 26) | @Override
method onCreateData (line 34) | @Override
method onClick (line 44) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/SelectedProductDialog.java
class SelectedProductDialog (line 17) | public class SelectedProductDialog extends TaoBaoDialog<SelectedProductD...
method SelectedProductDialog (line 19) | public SelectedProductDialog(Context context, View rootView) {
method getLayoutRes (line 26) | @Override
method onCreateData (line 34) | @Override
method onClick (line 45) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/Bottom2TopDialog.java
class Bottom2TopDialog (line 14) | public abstract class Bottom2TopDialog<D extends Bottom2TopDialog> exten...
method Bottom2TopDialog (line 15) | public Bottom2TopDialog(Context context) {
method show (line 21) | @Override
method show (line 30) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/CenterNormalDialog.java
class CenterNormalDialog (line 15) | public abstract class CenterNormalDialog<D extends CenterNormalDialog> e...
method CenterNormalDialog (line 16) | public CenterNormalDialog(Context context) {
method show (line 24) | @Override
method show (line 34) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/CenterScaleDialog.java
class CenterScaleDialog (line 14) | public abstract class CenterScaleDialog<D extends CenterScaleDialog> ext...
method CenterScaleDialog (line 15) | public CenterScaleDialog(Context context) {
method show (line 23) | @Override
method show (line 33) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/SimpleDialog.java
class SimpleDialog (line 18) | public abstract class SimpleDialog<D extends SimpleDialog> extends BaseD...
method SimpleDialog (line 19) | public SimpleDialog(Context context) {
method SimpleDialog (line 23) | public SimpleDialog(Context context, int theme) {
method show (line 30) | @Override
method show (line 46) | public void show(@AnimType int animType) {
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/TaoBaoDialog.java
class TaoBaoDialog (line 18) | public abstract class TaoBaoDialog<D extends TaoBaoDialog> extends Simpl...
method TaoBaoDialog (line 25) | public TaoBaoDialog(Context context, View rootView, int theme) {
method initView (line 30) | protected void initView() {
method show (line 41) | @Override
method show (line 50) | @Override
method dismiss (line 58) | @Override
class WindowsInAs (line 72) | private final class WindowsInAs extends BaseAnimatorSet {
method setAnimation (line 73) | @Override
class WindowsOutAs (line 86) | private final class WindowsOutAs extends BaseAnimatorSet {
method setAnimation (line 87) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/Top2BottomDialog.java
class Top2BottomDialog (line 14) | public abstract class Top2BottomDialog<D extends Top2BottomDialog> exten...
method Top2BottomDialog (line 15) | public Top2BottomDialog(Context context) {
method show (line 21) | @Override
method show (line 30) | @Override
FILE: app/src/main/java/com/alex/dialogdemo/ui/MainActivity.java
class MainActivity (line 19) | public class MainActivity extends AppCompatActivity implements View.OnCl...
method onCreate (line 26) | @Override
method initView (line 33) | private void initView() {
method onClick (line 48) | @Override
class MyOnDialogClickListener (line 66) | private final class MyOnDialogClickListener implements OnDialogClickLi...
method onDialogClick (line 68) | @Override
method onDestroy (line 75) | @Override
FILE: dialog/src/main/java/org/alex/dialog/anim/BaseAnimatorSet.java
class BaseAnimatorSet (line 14) | public abstract class BaseAnimatorSet {
method setAnimation (line 24) | public abstract void setAnimation(View view);
method start (line 26) | protected void start(final View view) {
method reset (line 69) | public static void reset(View view) {
method duration (line 83) | public BaseAnimatorSet duration(long duration) {
method delay (line 91) | public BaseAnimatorSet delay(long delay) {
method interpolator (line 99) | public BaseAnimatorSet interpolator(Interpolator interpolator) {
method listener (line 107) | public BaseAnimatorSet listener(AnimatorListener listener) {
method playOn (line 115) | public void playOn(View view) {
type AnimatorListener (line 119) | public interface AnimatorListener {
method onAnimationStart (line 120) | void onAnimationStart(Animator animator);
method onAnimationRepeat (line 122) | void onAnimationRepeat(Animator animator);
method onAnimationEnd (line 124) | void onAnimationEnd(Animator animator);
method onAnimationCancel (line 126) | void onAnimationCancel(Animator animator);
FILE: dialog/src/main/java/org/alex/dialog/base/BaseDialog.java
class BaseDialog (line 34) | @SuppressWarnings("all")
method BaseDialog (line 75) | public BaseDialog(Context context) {
method BaseDialog (line 82) | public BaseDialog(Context context, int theme) {
method initDialog (line 89) | protected void initDialog() {
method getLayoutRes (line 103) | @LayoutRes
method onCreateData (line 109) | public abstract void onCreateData();
method tag (line 111) | public D tag(@NonNull Object tag) {
method tag (line 118) | public Object tag() {
method setOnDialogClickListener (line 125) | public D setOnDialogClickListener(OnDialogClickListener onDialogClickL...
method destody (line 133) | public void destody() {
method setScaleHeight (line 145) | public D setScaleHeight(float scaleHeight) {
method setScaleWidth (line 153) | public D setScaleWidth(float scaleWidth) {
method onAttachedToWindow (line 158) | @Override
method initBaseDialogTheme (line 181) | protected void initBaseDialogTheme() {
method findView (line 192) | public <T extends View> T findView(@IdRes int id) {
method setText (line 197) | public D setText(@IdRes int id, @NonNull String text) {
method setText (line 203) | public D setText(@NonNull View view, @NonNull String text) {
method setOnCilckListener (line 216) | public D setOnCilckListener(@IdRes int id) {
method setOnCilckListener (line 225) | public D setOnCilckListener(@IdRes int... id) {
method onClick (line 235) | @Override
method onClick (line 243) | public abstract void onClick(View v, int id);
method onDialogClickListener (line 245) | public void onDialogClickListener(@ClickPosition String clickPosition) {
method setOnKeyListener (line 256) | public D setOnKeyListener(SimpleOnKeyListener simpleOnKeyListener) {
method setGravity (line 264) | public D setGravity(int gravity) {
method setGravity (line 274) | public D setGravity(int gravity, int yDP) {
method setAnimType (line 284) | public D setAnimType(@AnimType int animType) {
method attachView (line 299) | private void attachView(View view) {
method measureView (line 320) | private void measureView(View view) {
method getViewWidth (line 344) | protected int getViewWidth(View view) {
method getViewHeight (line 356) | protected int getViewHeight(View view) {
FILE: dialog/src/main/java/org/alex/dialog/callback/OnDialogClickListener.java
type OnDialogClickListener (line 12) | @SuppressWarnings("all")
method onDialogClick (line 15) | public void onDialogClick(D dialog, @ClickPosition String clickPositi...
FILE: dialog/src/main/java/org/alex/dialog/callback/OnWait2DismissListener.java
type OnWait2DismissListener (line 10) | @SuppressWarnings("all")
method onDismiss (line 15) | public void onDismiss(D dialog, int second);
FILE: dialog/src/main/java/org/alex/dialog/callback/SimpleOnKeyListener.java
class SimpleOnKeyListener (line 15) | @SuppressWarnings("all")
method SimpleOnKeyListener (line 20) | public SimpleOnKeyListener(Activity activity, @OnKeyType int onKeyType) {
method dismissNotKillActivity (line 25) | public static SimpleOnKeyListener dismissNotKillActivity(Activity acti...
method dismissKillActivity (line 29) | public static SimpleOnKeyListener dismissKillActivity(Activity activit...
method notDismissNotKillActivity (line 33) | public static SimpleOnKeyListener notDismissNotKillActivity(Activity a...
method onKey (line 37) | @Override
FILE: dialog/src/main/java/org/alex/dialog/helper/OnClickHelper.java
class OnClickHelper (line 14) | public class OnClickHelper {
method OnClickHelper (line 17) | private OnClickHelper() {
method getInstance (line 20) | public static OnClickHelper getInstance() {
method onBindClickListener (line 31) | public void onBindClickListener(@NonNull View contentView, @NonNull On...
method setOnClickListener (line 35) | private void setOnClickListener(@NonNull View view, @NonNull OnClickLi...
method setOnClickListener (line 47) | private void setOnClickListener(@NonNull ViewGroup viewGroup, @NonNull...
FILE: dialog/src/main/java/org/alex/dialog/util/StatusBarUtils.java
class StatusBarUtils (line 12) | @SuppressWarnings("all")
method getHeight (line 14) | public static int getHeight(Context context) {
method isFlymeOs4x (line 28) | public static boolean isFlymeOs4x() {
FILE: sweeploadingview/src/main/java/org/alex/callback/SimpleAnimatorListener.java
class SimpleAnimatorListener (line 11) | @SuppressWarnings("all")
method onAnimationStart (line 13) | @Override
method onAnimationEnd (line 18) | @Override
method onAnimationCancel (line 23) | @Override
method onAnimationRepeat (line 28) | @Override
FILE: sweeploadingview/src/main/java/org/alex/sweeploadingview/SweepLoadingView.java
class SweepLoadingView (line 33) | @SuppressWarnings("all")
method SweepLoadingView (line 68) | public SweepLoadingView(Context context) {
method SweepLoadingView (line 73) | public SweepLoadingView(Context context, AttributeSet attrs) {
method initView (line 78) | private void initView(AttributeSet attrs) {
method initObjectAnimation (line 98) | private void initObjectAnimation() {
method onSizeChanged (line 113) | @Override
method draw (line 124) | @Override
method onAttachedToWindow (line 139) | @Override
method onDetachedFromWindow (line 145) | @Override
method onVisibilityChanged (line 151) | @Override
method startSweepAnimation (line 161) | private void startSweepAnimation() {
method stopSweepAnimation (line 171) | private void stopSweepAnimation() {
class SweepAngleAnimatorListener (line 177) | private final class SweepAngleAnimatorListener extends SimpleAnimatorL...
method onAnimationRepeat (line 178) | @Override
method handleSweepRepeat (line 187) | private void handleSweepRepeat() {
class AngleProperty (line 194) | private final class AngleProperty extends Property<SweepLoadingView, F...
method AngleProperty (line 197) | public AngleProperty(Class<Float> type, String name) {
method get (line 202) | @Override
method set (line 211) | @Override
method getSweepAngle (line 221) | private float getSweepAngle() {
method setSweepAngle (line 225) | private void setSweepAngle(float sweepAngle) {
method getStartAngle (line 230) | private float getStartAngle() {
method setStartAngle (line 234) | private void setStartAngle(float startAngle) {
method setCircleColor (line 239) | private void setCircleColor(@ColorInt int color) {
method setCircleWidth (line 244) | private void setCircleWidth(int width) {
method setGapAngle (line 253) | private void setGapAngle(@FloatRange(from = 5F, to = 60F) float angle) {
method dp2Px (line 264) | private float dp2Px(float dp) {
Condensed preview — 92 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (121K chars).
[
{
"path": ".gitignore",
"chars": 118,
"preview": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n"
},
{
"path": ".idea/compiler.xml",
"chars": 686,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"CompilerConfiguration\">\n <resourceExt"
},
{
"path": ".idea/copyright/profiles_settings.xml",
"chars": 74,
"preview": "<component name=\"CopyrightManager\">\n <settings default=\"\" />\n</component>"
},
{
"path": ".idea/encodings.xml",
"chars": 159,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"Encoding\">\n <file url=\"PROJECT\" chars"
},
{
"path": ".idea/gradle.xml",
"chars": 740,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"GradleSettings\">\n <option name=\"linke"
},
{
"path": ".idea/misc.xml",
"chars": 2226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"EntryPointsManager\">\n <entry_points v"
},
{
"path": ".idea/modules.xml",
"chars": 910,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"ProjectModuleManager\">\n <modules>\n "
},
{
"path": ".idea/runConfigurations.xml",
"chars": 564,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"RunConfigurationProducerService\">\n <o"
},
{
"path": ".idea/vcs.xml",
"chars": 180,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"VcsDirectoryMappings\">\n <mapping dire"
},
{
"path": "README.md",
"chars": 85,
"preview": "# Dialog\n\n\n\n"
},
{
"path": "app/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "app/build.gradle",
"chars": 798,
"preview": "apply plugin: 'com.android.application'\n\nandroid {\n compileSdkVersion rootProject.ext.compileSdkVersion\n buildTool"
},
{
"path": "app/proguard-rules.pro",
"chars": 645,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in E:"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 2840,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "app/src/main/java/com/alex/dialogdemo/App.java",
"chars": 30,
"preview": "package com.alex.dialogdemo;\n\n"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/BottomDialog.java",
"chars": 896,
"preview": "package com.alex.dialogdemo.dialog;\n\nimport android.content.Context;\nimport android.view.View;\n\nimport com.alex.dialogde"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/LoadingDialog.java",
"chars": 828,
"preview": "package com.alex.dialogdemo.dialog;\n\nimport android.content.Context;\nimport android.view.View;\n\nimport com.alex.dialogde"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/NoticeDialog.java",
"chars": 895,
"preview": "package com.alex.dialogdemo.dialog;\n\nimport android.content.Context;\nimport android.view.View;\n\nimport com.alex.dialogde"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/OneButtonDialog.java",
"chars": 1061,
"preview": "package com.alex.dialogdemo.dialog;\n\nimport android.content.Context;\nimport android.view.View;\n\nimport com.alex.dialogde"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/SelectedProductDialog.java",
"chars": 1165,
"preview": "package com.alex.dialogdemo.dialog;\n\nimport android.content.Context;\nimport android.view.View;\n\nimport com.alex.dialogde"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/base/Bottom2TopDialog.java",
"chars": 692,
"preview": "package com.alex.dialogdemo.dialog.base;\n\nimport android.content.Context;\n\nimport com.alex.dialogdemo.R;\n\nimport org.ale"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/base/CenterNormalDialog.java",
"chars": 709,
"preview": "package com.alex.dialogdemo.dialog.base;\n\nimport android.content.Context;\n\nimport com.alex.dialogdemo.R;\n\nimport org.ale"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/base/CenterScaleDialog.java",
"chars": 704,
"preview": "package com.alex.dialogdemo.dialog.base;\n\nimport android.content.Context;\n\nimport com.alex.dialogdemo.R;\n\nimport org.ale"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/base/SimpleDialog.java",
"chars": 1847,
"preview": "package com.alex.dialogdemo.dialog.base;\n\nimport android.content.Context;\nimport android.view.Gravity;\nimport android.vi"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/base/TaoBaoDialog.java",
"chars": 3575,
"preview": "package com.alex.dialogdemo.dialog.base;\n\nimport android.animation.ObjectAnimator;\nimport android.content.Context;\nimpor"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/dialog/base/Top2BottomDialog.java",
"chars": 692,
"preview": "package com.alex.dialogdemo.dialog.base;\n\nimport android.content.Context;\n\nimport com.alex.dialogdemo.R;\n\nimport org.ale"
},
{
"path": "app/src/main/java/com/alex/dialogdemo/ui/MainActivity.java",
"chars": 3507,
"preview": "package com.alex.dialogdemo.ui;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActivity;\nimport andro"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_bottom2top_in.xml",
"chars": 258,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<translate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_bottom2top_out.xml",
"chars": 258,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<translate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_fade_in.xml",
"chars": 189,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<alpha xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:dur"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_fade_out.xml",
"chars": 189,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<alpha xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:dur"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_scale_in.xml",
"chars": 453,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<scale xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:dur"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_scale_out.xml",
"chars": 454,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<scale xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:dur"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_top2bottom_in.xml",
"chars": 259,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<translate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android"
},
{
"path": "app/src/main/res/anim/alex_dialog_anim_top2bottom_out.xml",
"chars": 259,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<translate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android"
},
{
"path": "app/src/main/res/drawable/alex_dialog_layer_list_shadow_rectangle.xml",
"chars": 4270,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "app/src/main/res/drawable/layer_list_shadow_dialog_one_button.xml",
"chars": 4747,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "app/src/main/res/drawable/layer_list_shadow_rectangle.xml",
"chars": 4139,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "app/src/main/res/drawable/selector_dialog_one_button_submit.xml",
"chars": 500,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <item "
},
{
"path": "app/src/main/res/layout/activity_main.xml",
"chars": 2460,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "app/src/main/res/layout/dialog_loading.xml",
"chars": 1057,
"preview": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:layout_width=\"match_p"
},
{
"path": "app/src/main/res/layout/dialog_notice.xml",
"chars": 2630,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n an"
},
{
"path": "app/src/main/res/layout/dialog_one_button.xml",
"chars": 1939,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n an"
},
{
"path": "app/src/main/res/layout/dialog_selected_product.xml",
"chars": 2280,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n an"
},
{
"path": "app/src/main/res/values/alex_color.xml",
"chars": 379,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"alex_item_layout\">#FFFFFF</color>\n <color name=\"a"
},
{
"path": "app/src/main/res/values/alex_dialog_anim_alpha_style.xml",
"chars": 325,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"alex_dialog_anim_alpha\" parent=\"android:Animation\">"
},
{
"path": "app/src/main/res/values/alex_dialog_anim_bottom2top_style.xml",
"chars": 342,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"alex_dialog_anim_bottom2top\" parent=\"android:Animat"
},
{
"path": "app/src/main/res/values/alex_dialog_anim_sacle_style.xml",
"chars": 336,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"alex_dialog_anim_scale\" parent=\"android:Animation\">"
},
{
"path": "app/src/main/res/values/alex_dialog_anim_top2bottom_style.xml",
"chars": 342,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"alex_dialog_anim_top2bottom\" parent=\"android:Animat"
},
{
"path": "app/src/main/res/values/alex_dialog_base_dim_style.xml",
"chars": 563,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"alex_dialog_base_dim_style\" parent=\"@android:style/"
},
{
"path": "app/src/main/res/values/alex_dialog_base_light_style.xml",
"chars": 566,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"alex_dialog_base_light_style\" parent=\"@android:styl"
},
{
"path": "app/src/main/res/values/alex_dialog_shadow_color_radius.xml",
"chars": 695,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"alexDialogBodyColor\">#EEFFFFFF</color>\n <color na"
},
{
"path": "app/src/main/res/values/alex_dimens.xml",
"chars": 210,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!--顶部标题栏的 颜色-->\n <dimen name=\"alex_title_height\">48dp</dimen>"
},
{
"path": "app/src/main/res/values/alex_string.xml",
"chars": 173,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"alex_digits_pwd\" >_0123456789abcdefghigjklmnopqrstu"
},
{
"path": "app/src/main/res/values/colors.xml",
"chars": 208,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"colorPrimary\">#3F51B5</color>\n <color name=\"color"
},
{
"path": "app/src/main/res/values/dimens.xml",
"chars": 211,
"preview": "<resources>\n <!-- Default screen margins, per the Android Design guidelines. -->\n <dimen name=\"activity_horizontal"
},
{
"path": "app/src/main/res/values/shadow_color_radius.xml",
"chars": 771,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <color name=\"cardBodyColor\">#FFFFFF</color>\n <color name=\"car"
},
{
"path": "app/src/main/res/values/shadow_color_radius_dialog_one_button.xml",
"chars": 927,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <color name=\"oneButtonDialogBodyColor\">#EEFFFFFF</color>\n <co"
},
{
"path": "app/src/main/res/values/strings.xml",
"chars": 69,
"preview": "<resources>\n <string name=\"app_name\">Dialog</string>\n</resources>\n"
},
{
"path": "app/src/main/res/values/styles.xml",
"chars": 383,
"preview": "<resources>\n\n <!-- Base application theme. -->\n <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar"
},
{
"path": "app/src/main/res/values-w820dp/dimens.xml",
"chars": 358,
"preview": "<resources>\n <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n (such as s"
},
{
"path": "build.gradle",
"chars": 839,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n r"
},
{
"path": "dialog/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "dialog/build.gradle",
"chars": 764,
"preview": "apply plugin: 'com.android.library'\n\nandroid {\n compileSdkVersion rootProject.ext.compileSdkVersion\n buildToolsVer"
},
{
"path": "dialog/proguard-rules.pro",
"chars": 645,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in E:"
},
{
"path": "dialog/src/main/AndroidManifest.xml",
"chars": 243,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"org.alex.dialog\">\n\n <application androi"
},
{
"path": "dialog/src/main/java/org/alex/dialog/anim/BaseAnimatorSet.java",
"chars": 3152,
"preview": "package org.alex.dialog.anim;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorSet;\nimport android.v"
},
{
"path": "dialog/src/main/java/org/alex/dialog/annotation/AnimType.java",
"chars": 1145,
"preview": "package org.alex.dialog.annotation;\n\nimport android.support.annotation.IntDef;\n\nimport java.lang.annotation.Documented;\n"
},
{
"path": "dialog/src/main/java/org/alex/dialog/annotation/ClickPosition.java",
"chars": 2629,
"preview": "package org.alex.dialog.annotation;\n\nimport android.support.annotation.StringDef;\n\nimport java.lang.annotation.Documente"
},
{
"path": "dialog/src/main/java/org/alex/dialog/annotation/OnKeyType.java",
"chars": 1028,
"preview": "package org.alex.dialog.annotation;\n\nimport android.support.annotation.IntDef;\n\nimport java.lang.annotation.Documented;\n"
},
{
"path": "dialog/src/main/java/org/alex/dialog/base/BaseDialog.java",
"chars": 9932,
"preview": "package org.alex.dialog.base;\n\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.graphics.Color;"
},
{
"path": "dialog/src/main/java/org/alex/dialog/callback/OnDialogClickListener.java",
"chars": 328,
"preview": "package org.alex.dialog.callback;\n\nimport android.app.Dialog;\n\nimport org.alex.dialog.annotation.ClickPosition;\n\n/**\n * "
},
{
"path": "dialog/src/main/java/org/alex/dialog/callback/OnWait2DismissListener.java",
"chars": 302,
"preview": "package org.alex.dialog.callback;\n\nimport android.app.Dialog;\n\n/**\n * 作者:Alex\n * 时间:2016年09月03日 21:29\n * 简述:\n */\n@Sup"
},
{
"path": "dialog/src/main/java/org/alex/dialog/callback/SimpleOnKeyListener.java",
"chars": 1632,
"preview": "package org.alex.dialog.callback;\n\nimport android.app.Activity;\nimport android.content.DialogInterface;\nimport android.c"
},
{
"path": "dialog/src/main/java/org/alex/dialog/helper/OnClickHelper.java",
"chars": 1942,
"preview": "//\n// Source code recreated from a .class file by IntelliJ IDEA\n// (powered by Fernflower decompiler)\n//\n\npackage org.al"
},
{
"path": "dialog/src/main/java/org/alex/dialog/util/StatusBarUtils.java",
"chars": 1276,
"preview": "package org.alex.dialog.util;\n\nimport android.content.Context;\nimport android.text.TextUtils;\nimport android.util.Log;\n\n"
},
{
"path": "dialog/src/main/res/values/alex_theme_no_title_app.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"alex_theme_no_title\" parent=\"Theme.AppCompat.Light."
},
{
"path": "dialog/src/main/res/values/strings.xml",
"chars": 69,
"preview": "<resources>\n <string name=\"app_name\">Dialog</string>\n</resources>\n"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 233,
"preview": "#Mon Dec 28 10:00:20 PST 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "gradle.properties",
"chars": 730,
"preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
},
{
"path": "gradlew",
"chars": 4971,
"preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n## Gradle start "
},
{
"path": "gradlew.bat",
"chars": 2314,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "settings.gradle",
"chars": 47,
"preview": "include ':app', ':dialog', ':sweeploadingview'\n"
},
{
"path": "sweeploadingview/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "sweeploadingview/build.gradle",
"chars": 763,
"preview": "apply plugin: 'com.android.library'\n\nandroid {\n compileSdkVersion rootProject.ext.compileSdkVersion\n buildToolsVer"
},
{
"path": "sweeploadingview/proguard-rules.pro",
"chars": 645,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in E:"
},
{
"path": "sweeploadingview/src/main/AndroidManifest.xml",
"chars": 294,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"org.alex.sweeploadingview\">\n\n "
},
{
"path": "sweeploadingview/src/main/java/org/alex/callback/SimpleAnimatorListener.java",
"chars": 536,
"preview": "package org.alex.callback;\n\nimport android.animation.Animator;\n\n/**\n * 作者:Alex\n * 时间:2016年09月03日 10:06\n * 简述:\n */\n\n@S"
},
{
"path": "sweeploadingview/src/main/java/org/alex/sweeploadingview/SweepLoadingView.java",
"chars": 7988,
"preview": "package org.alex.sweeploadingview;\n\nimport android.animation.Animator;\nimport android.animation.ObjectAnimator;\nimport a"
},
{
"path": "sweeploadingview/src/main/res/values/alex_sweep_loading_view_attrs.xml",
"chars": 699,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <declare-styleable name=\"SweepLoadingView\">\n <!-- 加载环的颜色 -"
},
{
"path": "sweeploadingview/src/main/res/values/strings.xml",
"chars": 79,
"preview": "<resources>\n <string name=\"app_name\">SweepLoadingView</string>\n</resources>\n"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the Alex-Cin/Dialog GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 92 files (102.9 KB), approximately 28.9k tokens, and a symbol index with 158 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.