自定义网络请求时加载动画dialog
2016-11-03 16:12
363 查看
1.先自定义一个启动时的闪屏textView
2.自定义dialog
3.dialog布局
4.在style中自定义dialog样式
5.用到的动画再res中anim文件夹
6.用到的背景图
7.使用-调用下面方法(可写在基类中)
package com.yskj.jh.app.widget; import android.content.Context; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Shader; import android.util.AttributeSet; import android.widget.TextView; /** * Created by Administrator on 2016/11/3 0003. */ public class FlashTextView extends TextView { //下面是实现动画需要的一些变量 private int mViewWidth = 0; private Paint mPaint; private LinearGradient mLinearGradient; private Matrix mMatrix = null; private int mTranslate; public FlashTextView(Context context, AttributeSet attrs) { super(context, attrs); } public FlashTextView(Context context) { super(context, null); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); /** * 这个方法在TextView大小的改变会被调用 * * int w 改变后的宽 * int h 改变后的高 * int oldw 改变前的宽 * int oldh 改变前的高 * * 该方法里面只是为了初始花上面定义的成员变量 */ if (mViewWidth == 0) { mViewWidth = getMeasuredWidth(); //拿到TextView的宽 if (mViewWidth > 0) { mPaint = getPaint(); //拿到画TextView的笔 //初始化渐变色给画笔用 /** * LinearGradient所需的 * float x0, float y0, float x1, float y1, startColor, stopColor, TileMode tile * float x0, float y0, float x1, float y1, int[] colors, float[] positions, TileMode tile * * float x0, float y0, float x1, float y1 在坐标上定了2个点,理解为在这个范围颜色渐变,渐变的颜色就是参数你设置的startColor, stopColor或则int[] colors * 这里没用到positions设为null就行 */ mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[]{0xff16ade3, 0xffffffff, 0xff16ade3}, null, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); //把你之前设置好渐变的颜色设置到上面初始画的笔中 mMatrix = new Matrix(); //初始花颜色矩阵 } } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); /** * 在onSizeChanged中初始化我们要的东西就可以开始画了 */ if (mMatrix != null) { mTranslate += mViewWidth / 5; if (mTranslate > 2 * mViewWidth) { mTranslate = -mViewWidth; } /** * 画出动画的主要的就是下面的3个方法 */ mMatrix.setTranslate(mTranslate, 0); //平移矩阵 mLinearGradient.setLocalMatrix(mMatrix); //把平移后的矩阵设置到颜色渐变中 postInvalidateDelayed(100); //最后一步就开始画了,这个方法会隔100毫秒画一次,但是每次颜色的矩阵是不同,这样你就会看到颜色动起来了 } } }
2.自定义dialog
package com.yskj.jh.app.dialog; import android.app.Dialog; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import com.yskj.jh.app.R; public class MyLoading extends Dialog{ private Context context = null; public MyLoading(Context context) { super(context); this.context = context; } public MyLoading(Context context, int theme) { super(context, theme); } /** * 得到自定义的progressDialog * @param context * @return */ public static MyLoading createLoadingDialog(Context context) { View view = LayoutInflater.from(context).inflate(R.layout.loading, null);// 得到加载view FrameLayout dialogView = (FrameLayout) view.findViewById(R.id.dialog_view);// 加载布局 ImageView loading = (ImageView) view.findViewById(R.id.loading); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(context, R.anim.loading_animation);// 加载动画 loading.startAnimation(hyperspaceJumpAnimation);// 使用ImageView显示动画 MyLoading loadingDialog = new MyLoading(context, R.style.loading_dialog);// 创建自定义样式dialog loadingDialog.setCancelable(true);// 不可以用“返回键”取消 loadingDialog.setContentView(dialogView, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));// 设置布局 return loadingDialog; } }
3.dialog布局
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dialog_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/loading_bg" android:gravity="center" android:minHeight="60dp" android:minWidth="60dp" android:orientation="vertical" android:padding="10dp" > <ImageView android:id="@+id/loading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@mipmap/loading" /> <com.yskj.jh.app.widget.FlashTextView android:id="@+id/loading_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="加载中" android:textSize="14sp"/> </FrameLayout>
4.在style中自定义dialog样式
<!-- 自定义loading dialog --> <style name="loading_dialog" parent="android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@mipmap/loading_bg</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
5.用到的动画再res中anim文件夹
<?xml version="1.0" encoding="utf-8"?> <set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="+360" android:duration="1000" android:startOffset="-1" android:repeatMode="restart" android:repeatCount="-1"/> </set>
6.用到的背景图
7.使用-调用下面方法(可写在基类中)
/** * dialog 启动 */ public void startMyDialog() { if (myloading == null) { myloading = MyLoading.createLoadingDialog(context); } if (!isFinishing()) { myloading.show(); } } /** * dialog 销毁 */ public void stopMyDialog() { if (myloading != null) { if (!isFinishing()){ myloading.dismiss(); } myloading = null; } }
相关文章推荐
- 自定义dialog,加载数据或网络请求时 dialog+动画(两种样式分享)
- Android为网络请求自定义加载动画
- AlertDialog对话框自定义大小,加载网络请求,点击不消失
- 使用Animation list实现网络请求过程中的加载动画dialog
- 自定义Dialog加载动画
- 自定义扇形进度条、异步加载网络图片、Activity疯狂旋转动画
- Android-AnimationDrawable自定义加载动画dialog
- 自定义Dialog 让Activity 不变暗 正在加载动画
- AngularJs 自定义ajax服务为请求添加加载动画
- 自定义 Dialog方式的加载动画
- 把网络请求加载过程dialog做成一个View
- android自定义加载数据动画dialog和简单的timer计时器
- 怎么自定义Dialog加载动画
- 加载中的动画(网络请求)
- 组合属性动画:缩放、渐变 平移和旋转+ImageLoader加载图片+MVP+OKhttp+拦截器+请求网络数据二级列表购物车
- android界面之美---自定义网络请求进度加载对话框
- 把网络请求加载过程dialog做成一个View
- 根据网络请求结果返回加载失败、加载为空、加载成功、加载中的自定义视图
- [IOS]UIWebView 请求网络页面或者加载本地资源页面
- Silverlight自定义加载动画系列