安卓自定义Dialog(四)
来源:互联网 发布:js手机号正则表达式 编辑:程序博客网 时间:2024/05/01 03:09
这次的自定义Dialog增加了自定义小滚轮和提示文字。
先来看下效果图:
实现功能的代码:
CircularRing mLoadingView; Dialog mLoadingDialog; public DialogLoading(Context context) { this(context, "正在加载"); } public DialogLoading(Context context, String msg) { // 首先得到整个View View view = LayoutInflater.from(context).inflate( R.layout.loading_dialog_view, null); DisplayMetrics dm = context.getResources().getDisplayMetrics(); // 获取整个布局 LinearLayout layout = (LinearLayout) view.findViewById(R.id.dialog_view); // 页面中的LoadingView mLoadingView = (CircularRing) view.findViewById(R.id.lv_circularring); // 页面中显示文本 TextView loadingText = (TextView) view.findViewById(R.id.loading_text); // 显示文本 loadingText.setText(msg); // 创建自定义样式的Dialog mLoadingDialog = new Dialog(context, R.style.dialog); // 设置返回键无效 mLoadingDialog.setCancelable(false); mLoadingDialog.setContentView(layout, new LinearLayout.LayoutParams( dm.widthPixels * 1 / 3, LinearLayout.LayoutParams.MATCH_PARENT)); } public void show() { if (mLoadingDialog != null) { mLoadingDialog.show(); mLoadingView.startAnim(); } } public void close() { if (mLoadingDialog != null) { mLoadingView.stopAnim(); mLoadingDialog.dismiss(); mLoadingDialog = null; } }
布局代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dialog_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/dialogloading_bg" android:gravity="center" android:orientation="vertical" android:padding="20dp"> <com.lcb.view.CircularRing android:id="@+id/lv_circularring" android:layout_width="50dp" android:layout_height="50dp"/> <TextView android:id="@+id/loading_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center_horizontal" android:textColor="#ffffff" android:textSize="15sp"/></LinearLayout>自定义view:CircularRing
public class CircularRing extends View{ private float mWidth = 0f; private float mPadding = 0f; private float startAngle = 0f; private Paint mPaint; public CircularRing(Context context) { this(context, null); } public CircularRing(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CircularRing(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (getMeasuredWidth() > getHeight()) mWidth = getMeasuredHeight(); else mWidth = getMeasuredWidth(); mPadding = 5; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.argb(100, 255, 255, 255)); canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2 - mPadding, mPaint); mPaint.setColor(Color.WHITE); RectF rectF = new RectF(mPadding, mPadding, mWidth - mPadding, mWidth - mPadding); canvas.drawArc(rectF, startAngle, 100 , false, mPaint);//第四个参数是否显示半径 } private void initPaint() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(Color.WHITE); mPaint.setStrokeWidth(8); } public void startAnim() { stopAnim(); startViewAnim(0f, 1f, 1000); } public void stopAnim() { if (valueAnimator != null) { clearAnimation(); valueAnimator.setRepeatCount(1); valueAnimator.cancel(); valueAnimator.end(); } } ValueAnimator valueAnimator; private ValueAnimator startViewAnim(float startF, final float endF, long time) { valueAnimator = ValueAnimator.ofFloat(startF, endF); valueAnimator.setDuration(time); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环 valueAnimator.setRepeatMode(ValueAnimator.RESTART);// valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float value = (float) valueAnimator.getAnimatedValue(); startAngle = 360 * value; invalidate(); } }); valueAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); } }); if (!valueAnimator.isRunning()) { valueAnimator.start(); } return valueAnimator; }}
阅读全文
0 0
- 安卓自定义Dialog(四)
- 安卓自定义Dialog
- 安卓自定义Dialog(一)
- 安卓自定义Dialog(二)
- 安卓自定义Dialog(三)
- 安卓自定义dialog文章
- 安卓开发自定义dialog
- 安卓自定义透明Dialog
- 安卓自定义对话框(android.app.Dialog)
- 安卓开发之自定义Dialog
- 安卓自定义超级提示框Dialog
- 安卓自定义Dialog的实现
- 安卓Dialog自定义大小及居中
- 安卓学习之—自定义Dialog
- 安卓自定义Dialog之BaseDialog
- 安卓自定义控件(四)实现自定义Layout
- 解决安卓自定义Dialog不能水平填满屏幕
- [安卓]手机管家(四)自定义属性
- 利用XE7的OmniXML完成XML文件的处理,支持跨平台
- Linux学习笔记-Vim常用命令
- Angular使用taobao镜像以加快下载速度
- 技术要扎扎实实的做,业余功夫也要修炼
- vmware 运行虚拟机显示 内部错误
- 安卓自定义Dialog(四)
- 图论中的单源最短路径算法——Bellman-Ford 算法
- Stack Overflow程序员最不喜欢的编程语言大调查:Ruby、Objective-C、PHP中枪
- java整理(简)
- 软件测试方法(四)
- 你有学习者综合征吗?Web 开发是重灾区
- 什么是网络流
- Django的安全防护-Django在安全问题上的处理详解
- 双11福利仍在加载中...