Android骨架图

news/2025/2/12 21:48:07/

用法:在图片上实现动画效果

<FrameLayoutandroid:id="@+id/image_container"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/ivBlank"android:layout_width="match_parent"android:layout_height="260dp"android:scaleType="centerCrop"android:src="@drawable/wm_after_meeting_blank" /><com.xx.view.SkeletonViewandroid:id="@+id/skeleton_view"android:layout_width="match_parent"android:layout_height="260dp" /></FrameLayout>

实现:

import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View/*** Author: xx* Description:骨架图效果* Date: 2023/9/25 15:14*/
class SkeletonView : View {private val edgeColor = Color.parseColor("#00FFFFFF")private val centerColor = Color.parseColor("#20FFFFFF")private val mColors = intArrayOf(edgeColor, centerColor, edgeColor)private val mPaint = Paint()private val mLinearGradient: LinearGradientprivate var mViewWidth = 0private var mViewHeight = 0private var mTranslate = 0fprivate val shimerWidth = 160constructor(context: Context) : super(context)constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)init {mLinearGradient = LinearGradient(0f,0f,shimerWidth.toFloat(),shimerWidth.toFloat(),mColors,floatArrayOf(0f, 0.5f, 1.0f),Shader.TileMode.CLAMP)mPaint.shader = mLinearGradient}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)mViewWidth = measuredWidthmViewHeight = measuredHeightif (mViewWidth > 0 && mViewHeight > 0) {mTranslate += mViewWidth / 10if (mTranslate > mViewWidth + shimerWidth) {mTranslate = -shimerWidth.toFloat()}}mLinearGradient.setLocalMatrix(Matrix().apply {setTranslate(mTranslate, mTranslate)})canvas.drawRect(0f, 0f, mViewWidth.toFloat(), mViewHeight.toFloat(), mPaint)postInvalidateDelayed(100)}
}

颜色宽度速度都可以调,不需要引入三方sdk


http://www.ppmy.cn/news/1242913.html

相关文章

MetaObject-BeanWrapper-MetaClass-Reflector的关系

MetaObject、BeanWrapper、MetaClass、Reflector之间是通过装饰器模式逐层进行装饰的。其中MetaObject、BeanWrapper是操作对象&#xff1b;MetaClass、Reflector是操作Class ObjectWrapper类结构图 BaseWrapper是对BeanWrapper、MapWrapper公共方法的提取及类图的优化&#…

Gin 学习笔记03-参数绑定

参数绑定 1、ShouldBindJSON2、ShouldBindQuery3、ShouldBindUri4、ShouldBind 1、ShouldBindJSON package mainimport ("github.com/gin-gonic/gin""net/http" )type User struct {Name string json:"name"Gender string json:"gender&…

成为AI产品经理——模型评估指标

目录 一、模型评估分类 1.在线评估 2.离线评估 二、离线模型评估 1.特征评估 ① 特征自身稳定性 ② 特征来源稳定性 ③ 特征成本 2.模型评估 ① 统计性评估 覆盖度 最大值、最小值 分布形态 ② 模型性能指标 分类问题 回归问题 ③ 模型的稳定性 模型评估指标分…

C语言之内存函数

C语言之内存函数 文章目录 C语言之内存函数1. memcpy 使⽤和模拟实现1.1 memcpy 函数的使用1.3 memcpy的模拟实现 2. memmove 使⽤和模拟实现2.1 memmove 函数的使用2.2 memmove的模拟实现 3. memset 函数的使用4. memcmp 函数的使⽤ 1. memcpy 使⽤和模拟实现 函数声明如下&a…

单片机AT89C51直流电机控制电路PWM设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;直流电机 获取论文报告源码源程序原理图 此文将介绍一种直流电机&#xff0c;详细阐述了用单片机输出口所给占空比的不同实现电机的调速的设计方法&#xff1b;着重讨论L298用于电机驱动时特有的优势。直流电机调速具有…

PyTorch Models

Overview pth模型保存时是按照“整个模型保存”和“只保存模型参数”会影响模型的加载和访问方式 torch.save(vgg16, "vgg16.pt") torch.save(vgg16,"vgg16.ckpt") torch.save(vgg16,"vgg16.pth") torch.save(vgg16,"vgg16.pkl")…

Linux:Ubuntu系统安装软件

本次以安装vim为例 sudo apt-get remove vim //卸载vim sudo apt-get install vim //安装vim sudo apt-cache show vim //获取vim软件信息安装时间较长。 安装完成后&#xff0c;执行下第三条指令&#xff0c;测试下是否安装成功即可。

【ARM CoreLink 系列 3.1 -- CCI-500 详细介绍 -上半部】

文章目录 1.1 CCI-500 介绍1.2 CCI-500 features 详细介绍1.2.1 Data Coherency between ACE Masters1.2.2 Quality of Service (QoS)1.2.3 (I/O) Coherency1.2.4 Crossbar Interconnect Functionality1.2.5 Performance Monitoring Unit (PMU)1.2.6 DVM Message Transport1.2.…