iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Android中实现一个笑脸进度加载动画
  • 530
分享到

怎么在Android中实现一个笑脸进度加载动画

2023-06-14 23:06:00 530人浏览 薄情痞子
摘要

怎么在Android中实现一个笑脸进度加载动画?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android是什么Android是一种基于linux内核的自由及开放源代码的操作系

怎么在Android中实现一个笑脸进度加载动画?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Android是什么

Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发

一、默认状态

首先需要确定好嘴巴和眼睛的初始位置,我这里的初始化嘴巴是一个半圆,在横轴下方。眼睛分别与横轴夹角60度,如下图:

怎么在Android中实现一个笑脸进度加载动画

这两部分可以使用pathMeasure,我这里使用最简单的两个apicanvas.drawArc()和canvas.drawPoint()。

1、画嘴巴

 //画起始笑脸canvas.drawArc(-radius, -radius, radius, radius, startAngle, swipeAngle, false,facePaint);

这里的startAngle初始值为0,swiperAngle为180,半径radius为40。

2、画眼睛

(1)初始化眼睛坐标

       private void initEyes() {        //默认两个眼睛坐标位置 角度转弧度        leftEyeX = (float) (-radius * Math.cos(eyeStartAngle * Math.PI / 180));        leftEyeY = (float) (-radius * Math.sin(eyeStartAngle * Math.PI / 180));        rightEyeX = (float) (radius * Math.cos(eyeStartAngle * Math.PI / 180));        rightEyeY = (float) (-radius * Math.sin(eyeStartAngle * Math.PI / 180));    }

注意:需要将角度转弧度

(2)开始画眼睛

   //画起始眼睛  canvas.drawPoint(leftEyeX, leftEyeY, eyePaint);  canvas.drawPoint(rightEyeX, rightEyeY, eyePaint);

二、合并状态

这个状态可以分为两部分

  • 嘴巴的旋转

  • 眼睛的旋转

1、嘴巴的旋转

开启动画

 faceLoadingAnimator = ValueAnimator.ofFloat(0, 1).setDuration(1000);     faceLoadingAnimator.setInterpolator(new AccelerateDecelerateInterpolator());     faceLoadingAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                faceValue = (float) animation.getAnimatedValue();                invalidate();            }        });        //动画延迟500ms启动        faceLoadingAnimator.setStartDelay(200);        faceLoadingAnimator.addListener(new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animation) {            }            @Override            public void onAnimationEnd(Animator animation) {                //恢复起始状态                currentStatus = smileStatus;            }            @Override            public void onAnimationCancel(Animator animation) {            }            @Override            public void onAnimationRepeat(Animator animation) {            }        });

动画执行时间1s,记录动画当前执行进度值,存放在faceValue中。当动画执行结束的时候,需要将状态恢复到默认状态,调用invalidate的时候,进入onDraw()方法,开始重新绘制嘴巴。

//记录时刻的旋转角度                startAngle = faceValue * 360;                //追上右边眼睛                if (startAngle >= 120 + startAngle / 2) {                    canvas.drawArc(-radius, -radius, radius, radius, startAngle,                            swipeAngle, false, facePaint);                    //开始自转一圈                    mHandler.sendEmptyMessage(2);                    //此时记录自转一圈起始的角度                    circleStartAngle = 120 + startAngle / 2;                } else {                    //追眼睛的过程                    canvas.drawArc(-radius, -radius, radius, radius, startAngle,                            swipeAngle, false, facePaint);                }

这里的每次旋转角度为startAngle。当完全追赶上右侧眼睛的时候,开始执行自转一周,并停止当前动画。

2、眼睛的旋转

眼睛的开始旋转速度明显是慢于嘴巴的旋转速度,所以每次的旋转速度可以设置为嘴巴的一半

  //画左边眼睛 ,旋转的角度设置为笑脸旋转角度的一半,这样笑脸才能追上眼睛  leftEyeX = (float) (-radius * Math.cos((60 + startAngle / 2) * Math.PI / 180));  leftEyeY = (float) (-radius * Math.sin((60 + startAngle / 2) * Math.PI / 180));  canvas.drawPoint(leftEyeX, leftEyeY, eyePaint);  //画右边眼睛 ,旋转的角度设置为笑脸旋转角度的一半,这样笑脸才能追上眼睛  rightEyeX = (float) (radius * Math.cos((60 - startAngle / 2) * Math.PI / 180));  rightEyeY = (float) (-radius * Math.sin((60 - startAngle / 2) * Math.PI / 180));  canvas.drawPoint(rightEyeX, rightEyeY, eyePaint);

三、自转状态

1、开启动画

circleAnimator = ValueAnimator.ofFloat(0, 1).setDuration(1000);        circleAnimator.setInterpolator(new LinearInterpolator());        circleAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                circleValue = (float) animation.getAnimatedValue();                invalidate();            }        });        circleAnimator.addListener(new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animation) {            }            @Override            public void onAnimationEnd(Animator animation) {                mHandler.sendEmptyMessage(3);            }            @Override            public void onAnimationCancel(Animator animation) {            }            @Override            public void onAnimationRepeat(Animator animation) {            }        });

2、重新绘制

 canvas.drawArc(-radius, -radius, radius, radius,                        circleStartAngle + circleValue * 360,                        swipeAngle, false, facePaint);

四、分离状态

主要的注意点就是眼睛的旋转角度设置为嘴巴旋转角度的2倍,这样才会达到眼睛超过嘴巴的效果,主要的旋转代码如下:

startAngle = faceValue * 360;                //判断当前笑脸的起点是否已经走过260度 (吐出眼睛的角度,角度可以任意设置)                if (startAngle >= splitAngle) {                    //画左边眼睛 ,旋转的角度设置为笑脸旋转角度的2倍,这样眼睛才能快于笑脸旋转速度                    leftEyeX = (float) (-radius * Math.cos((eyeStartAngle + startAngle * 2) * Math.PI / 180));                    leftEyeY = (float) (-radius * Math.sin((eyeStartAngle + startAngle * 2) * Math.PI / 180));                    canvas.drawPoint(leftEyeX, leftEyeY, eyePaint);                    //画右边眼睛 ,旋转的角度设置为笑脸旋转角度的2倍,这样眼睛才能快于笑脸旋转速度                    rightEyeX = (float) (radius * Math.cos((eyeStartAngle - startAngle * 2) * Math.PI / 180));                    rightEyeY = (float) (-radius * Math.sin((eyeStartAngle - startAngle * 2) * Math.PI / 180));                    canvas.drawPoint(rightEyeX, rightEyeY, eyePaint);                }                //画笑脸                canvas.drawArc(-radius, -radius, radius, radius, startAngle, swipeAngle,                        false, facePaint);

最后附上完整代码

public class FaceView2 extends View {    //圆弧半径    private int radius = 40;    //圆弧画笔宽度    private float paintWidth = 15;    //笑脸状态(一个脸,两个眼睛)    private final int smileStatus = 0;    //加载状态 合并眼睛,旋转    private final int loadingStatus = 1;    //合并完成 转一圈    private final int circleStatus = 2;    //转圈完成 吐出眼睛    private final int splitStatus = 3;    //当前状态    private int currentStatus = smileStatus;    //笑脸画笔    private Paint facePaint;    //眼睛画笔    private Paint eyePaint;    //笑脸开始角度    private float startAngle;    //笑脸弧度    private float swipeAngle;    //左侧眼睛起点x轴坐标    private float leftEyeX = 0;    //左侧眼睛起点y轴坐标    private float leftEyeY = 0;    //右侧眼睛起点x轴坐标    private float rightEyeX;    //右侧眼睛起点y轴坐标    private float rightEyeY;    //一开始默认状态笑脸转圈动画    private ValueAnimator faceLoadingAnimator;    //吞并完成后,自转一圈动画    private ValueAnimator circleAnimator;    //faceLoadingAnimator动画进度值    private float faceValue;    //circleAnimator动画进度值    private float circleValue;    //记录开始自转一圈的起始角度    private float circleStartAngle;    //吐出眼睛的角度    private float splitAngle;    private float initStartAngle;    //眼睛起始角度    private float eyeStartAngle = 60;    public FaceView2(Context context) {        this(context, null);    }    public FaceView2(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public FaceView2(Context context, AttributeSet attrs,                     int defStyleAttr) {        super(context, attrs, defStyleAttr);        //自定义属性        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.FaceView2,                defStyleAttr, 0);        initStartAngle = typedArray.getFloat(R.styleable.FaceView2_startAngle, 0);        swipeAngle = typedArray.getFloat(R.styleable.FaceView2_swipeAngle, 180);        splitAngle = typedArray.getFloat(R.styleable.FaceView2_splitAngle, 260);        typedArray.recycle();        startAngle = initStartAngle;        eyeStartAngle += startAngle;        initEyes();        initPaint();        //开始默认动画        initAnimator();    }        private void initPaint() {        //初始化画笔        facePaint = new Paint();        facePaint.setStrokeWidth(paintWidth);        facePaint.setColor(Color.RED);        facePaint.setAntiAlias(true);        facePaint.setStyle(Paint.Style.STROKE);        facePaint.setStrokeCap(Paint.Cap.ROUND);        eyePaint = new Paint();        eyePaint.setStrokeWidth(paintWidth);        eyePaint.setColor(Color.RED);        eyePaint.setAntiAlias(true);        eyePaint.setStyle(Paint.Style.STROKE);        eyePaint.setStrokeCap(Paint.Cap.ROUND);    }        private void initEyes() {        //默认两个眼睛坐标位置 角度转弧度        leftEyeX = (float) (-radius * Math.cos(eyeStartAngle * Math.PI / 180));        leftEyeY = (float) (-radius * Math.sin(eyeStartAngle * Math.PI / 180));        rightEyeX = (float) (radius * Math.cos(eyeStartAngle * Math.PI / 180));        rightEyeY = (float) (-radius * Math.sin(eyeStartAngle * Math.PI / 180));    }    private Handler mHandler = new Handler(new Handler.Callback() {        @RequiresApi(api = Build.VERSION_CODES.KITKAT)        @Override        public boolean handleMessage(Message msg) {            switch (msg.what) {                case 1:                    //启动一开始笑脸转圈动画,并且开始合并眼睛                    currentStatus = loadingStatus;                    faceLoadingAnimator.start();                    break;                case 2:                    //暂停眼睛和笑脸动画                    currentStatus = circleStatus;                    faceLoadingAnimator.pause();                    //启动笑脸自转一圈动画                    circleAnimator.start();                    break;                case 3:                    //恢复笑脸转圈动画,并且开始分离眼睛                    currentStatus = splitStatus;                    circleAnimator.cancel();                    faceLoadingAnimator.resume();                    invalidate();                    break;            }            return false;        }    });    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //画布移到中间        canvas.translate(getWidth() / 2, getHeight() / 2);        switch (currentStatus) {            //起始状态            case smileStatus:                //起始角度为0                startAngle = initStartAngle;                //画起始笑脸                canvas.drawArc(-radius, -radius, radius, radius, startAngle, swipeAngle, false,                        facePaint);                //重置起始眼睛坐标                initEyes();                //画起始眼睛                canvas.drawPoint(leftEyeX, leftEyeY, eyePaint);                canvas.drawPoint(rightEyeX, rightEyeY, eyePaint);                //更改状态,进行笑脸合并眼睛                mHandler.sendEmptyMessage(1);                break;            //合并状态            case loadingStatus:                //记录时刻的旋转角度                startAngle = faceValue * 360;                //追上右边眼睛                if (startAngle >= 120 + startAngle / 2) {                    canvas.drawArc(-radius, -radius, radius, radius, startAngle,                            swipeAngle, false, facePaint);                    //开始自转一圈                    mHandler.sendEmptyMessage(2);                    //此时记录自转一圈起始的角度                    circleStartAngle = 120 + startAngle / 2;                } else {                    //追眼睛的过程                    canvas.drawArc(-radius, -radius, radius, radius, startAngle,                            swipeAngle, false, facePaint);                }                //画左边眼睛 ,旋转的角度设置为笑脸旋转角度的一半,这样笑脸才能追上眼睛                leftEyeX = (float) (-radius * Math.cos((60 + startAngle / 2) * Math.PI / 180));                leftEyeY = (float) (-radius * Math.sin((60 + startAngle / 2) * Math.PI / 180));                canvas.drawPoint(leftEyeX, leftEyeY, eyePaint);                //画右边眼睛 ,旋转的角度设置为笑脸旋转角度的一半,这样笑脸才能追上眼睛                rightEyeX = (float) (radius * Math.cos((60 - startAngle / 2) * Math.PI / 180));                rightEyeY = (float) (-radius * Math.sin((60 - startAngle / 2) * Math.PI / 180));                canvas.drawPoint(rightEyeX, rightEyeY, eyePaint);                break;            //自转一圈状态 circleValue * 360 为旋转角度            case circleStatus:                canvas.drawArc(-radius, -radius, radius, radius,                        circleStartAngle + circleValue * 360,                        swipeAngle, false, facePaint);                break;            //笑脸眼睛分离状态            case splitStatus:                startAngle = faceValue * 360;                //判断当前笑脸的起点是否已经走过260度 (吐出眼睛的角度,角度可以任意设置)                if (startAngle >= splitAngle) {                    //画左边眼睛 ,旋转的角度设置为笑脸旋转角度的2倍,这样眼睛才能快于笑脸旋转速度                    leftEyeX = (float) (-radius * Math.cos((eyeStartAngle + startAngle * 2) * Math.PI / 180));                    leftEyeY = (float) (-radius * Math.sin((eyeStartAngle + startAngle * 2) * Math.PI / 180));                    canvas.drawPoint(leftEyeX, leftEyeY, eyePaint);                    //画右边眼睛 ,旋转的角度设置为笑脸旋转角度的2倍,这样眼睛才能快于笑脸旋转速度                    rightEyeX = (float) (radius * Math.cos((eyeStartAngle - startAngle * 2) * Math.PI / 180));                    rightEyeY = (float) (-radius * Math.sin((eyeStartAngle - startAngle * 2) * Math.PI / 180));                    canvas.drawPoint(rightEyeX, rightEyeY, eyePaint);                }                //画笑脸                canvas.drawArc(-radius, -radius, radius, radius, startAngle, swipeAngle,                        false, facePaint);                break;        }    }        private void initAnimator() {        faceLoadingAnimator = ValueAnimator.ofFloat(0, 1).setDuration(1000);        faceLoadingAnimator.setInterpolator(new AccelerateDecelerateInterpolator());        faceLoadingAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                faceValue = (float) animation.getAnimatedValue();                invalidate();            }        });        //动画延迟500ms启动        faceLoadingAnimator.setStartDelay(200);        faceLoadingAnimator.addListener(new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animation) {            }            @Override            public void onAnimationEnd(Animator animation) {                //恢复起始状态                currentStatus = smileStatus;            }            @Override            public void onAnimationCancel(Animator animation) {            }            @Override            public void onAnimationRepeat(Animator animation) {            }        });        circleAnimator = ValueAnimator.ofFloat(0, 1).setDuration(1000);        circleAnimator.setInterpolator(new LinearInterpolator());        circleAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                circleValue = (float) animation.getAnimatedValue();                invalidate();            }        });        circleAnimator.addListener(new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animation) {            }            @Override            public void onAnimationEnd(Animator animation) {                mHandler.sendEmptyMessage(3);            }            @Override            public void onAnimationCancel(Animator animation) {            }            @Override            public void onAnimationRepeat(Animator animation) {            }        });    }}

自定义属性

<declare-styleable name="FaceView2">        <attr name="startAngle" fORMat="dimension" />        <attr name="swipeAngle" format="dimension" />        <attr name="splitAngle" format="dimension" /></declare-styleable>

布局文件中使用

<com.example.viewdemo.FaceView2     android:layout_width="match_parent"     android:layout_height="match_parent"/>

看完上述内容,你们掌握怎么在Android中实现一个笑脸进度加载动画的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么在Android中实现一个笑脸进度加载动画

本文链接: https://www.lsjlt.com/news/275692.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Android中实现一个笑脸进度加载动画
    怎么在Android中实现一个笑脸进度加载动画?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系...
    99+
    2023-06-14
  • Android实现笑脸进度加载动画
    目录一、默认状态1、画嘴巴2、画眼睛二、合并状态1、嘴巴的旋转2、眼睛的旋转三、自转状态1、开启动画2、重新绘制四、分离状态最后附上完整代码最近看到豆瓣的笑脸loading很有意思,...
    99+
    2024-04-02
  • 怎么用HTML5+CSS3动态画一个笑脸
    本篇内容介绍了“怎么用HTML5+CSS3动态画一个笑脸”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!今天...
    99+
    2024-04-02
  • 怎么用CSS3实现进度加载动画
    本篇内容主要讲解“怎么用CSS3实现进度加载动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用CSS3实现进度加载动画”吧!先看看效果图:CSS Code...
    99+
    2024-04-02
  • 怎么在Android应用中实现一个加载数据帧动画效果
    这期内容当中小编将会给大家带来有关怎么在Android应用中实现一个加载数据帧动画效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现步骤:1、xml布局<&#63;xml version...
    99+
    2023-05-31
    android roi
  • android加载动画怎么实现
    在Android中,可以使用Animation类来实现加载动画。以下是使用Animation类实现加载动画的步骤:1. 创建动画资源...
    99+
    2023-08-18
    android
  • 怎么在Android中实现一个仿微软系统加载动画效果
    怎么在Android中实现一个仿微软系统加载动画效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实现步骤:初始化五个圆球分别设置中心点,方便画圆利用ValueAnimat...
    99+
    2023-06-14
  • android怎么实现加载动画效果
    Android中实现加载动画效果可以通过以下几种方式:1. 使用ProgressBar:ProgressBar是Android系统提...
    99+
    2023-08-08
    android
  • 怎么在Android应用中实现一个动画效果
    本篇文章给大家分享的是有关怎么在Android应用中实现一个动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android 三种动画详解帧动画一张张图片不断的切换,形成动...
    99+
    2023-05-31
    android roi
  • Android应用中怎么添加一个联网等待加载动画
    Android应用中怎么添加一个联网等待加载动画?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Android带红点的底部导航拦首先写底部导航栏的界面view...
    99+
    2023-05-31
    android roi
  • 怎么在Android应用中添加一个添加物品动画
    这篇文章将为大家详细讲解有关怎么在Android应用中添加一个添加物品动画,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。开发环境:AndroidStudio2.1.2+gradle-2.10...
    99+
    2023-05-31
    android roi
  • 在Android项目中实现一个点赞动画
    在Android项目中实现一个点赞动画?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体内容如下MainActivity.java代码:package siso.likea...
    99+
    2023-05-31
    android roi 目中
  • 怎么在Android中利用TextView实现一个数字滚动动画
    怎么在Android中利用TextView实现一个数字滚动动画?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。NumberRollingView是一个自定义的自带数字滚动动画的T...
    99+
    2023-05-31
    android textview 动动
  • Android怎么实现加载视差动画效果
    本篇内容主要讲解“Android怎么实现加载视差动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么实现加载视差动画效果”吧!基础知识继 Android实现旋转动画...
    99+
    2023-06-20
  • Android中怎么利用Xfermode实现动态文字加载动画
    这篇文章将为大家详细讲解有关Android中怎么利用Xfermode实现动态文字加载动画,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。第一步:我们要熟悉一下这个图16个图形结果,其实现在有1...
    99+
    2023-05-30
    android
  • 使用canvas怎么实现一个圆形进度条动画
    这期内容当中小编将会给大家带来有关使用canvas怎么实现一个圆形进度条动画,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. canvas的HTML部分很简单就一个canvas标签canvas画布的宽高...
    99+
    2023-06-09
  • 怎么在android中利用ProgressDialog实现一个加载效果
    怎么在android中利用ProgressDialog实现一个加载效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。先自定义一个类继承ProgressDialogpubli...
    99+
    2023-05-31
    android progressdialog gr
  • Vue 中怎么惰性加载加一个进度条
    本篇文章为大家展示了Vue 中怎么惰性加载加一个进度条,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为什么要按需加载Vue.js 中 SPA  的典型工作...
    99+
    2024-04-02
  • 怎么在Android项目中添加 一个进度条功能
    怎么在Android项目中添加 一个进度条功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。效果如图… 代码实现过程–main布局 这个布局中就是一个简单的引用<...
    99+
    2023-05-31
    android roi 目中
  • 利用Glide怎么实现一个加载进度条功能
    利用Glide怎么实现一个加载进度条功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用Glide.with(MainActivity.this).using(new Pro...
    99+
    2023-05-31
    glide %d
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作