当前位置: 首页> 教育> 就业 > 河源网站设计怎么做_郑州平面设计培训速成班_网络营销推广方案论文_如何优化网络

河源网站设计怎么做_郑州平面设计培训速成班_网络营销推广方案论文_如何优化网络

时间:2025/7/10 17:31:43来源:https://blog.csdn.net/sunshine_guo/article/details/145036417 浏览次数:0次
河源网站设计怎么做_郑州平面设计培训速成班_网络营销推广方案论文_如何优化网络

XML文件

<com.example.myapplication.MyViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_gravity="center"android:layout_height="400dp"/>

自定义View代码

class MyView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {private var mStartColor = Color.REDprivate var mMiddleColor = Color.BLUEprivate var mEndColor = Color.GREENprivate var mDrawRect = RectF()private var mLinearGradient: LinearGradient? = nullprivate var mDrawPaint = Paint()override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {super.onSizeChanged(w, h, oldw, oldh)mDrawRect = RectF(0f, 0f, w.toFloat(), h.toFloat())}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)mLinearGradient?.let {mDrawPaint.shader = itcanvas.drawRect(mDrawRect, mDrawPaint)}}
}

LinearGradient线性着色器参数详解

  • LinearGradient线性着色器赋值给Paint画笔,可以使用Canvas画布和Paint画笔绘制具有线性渐变的内容

两种构造函数

public LinearGradient(float x0, // 起始点的x坐标float y0, // 起始点的y坐标float x1, // 结束点的x坐标float y1, // 结束点的y坐标@ColorInt int color0, // 单个起始颜色@ColorInt int color1, // 单个结束颜色@NonNull TileMode tile // 颜色映射方式) {}public LinearGradient(float x0, // 起始点的x坐标float y0, // 起始点的y坐标float x1, // 结束点的x坐标float y1, // 结束点的y坐标@NonNull @ColorLong long[] colors, // 多个起始颜色@Nullable float[] positions, // 多个结束颜色@NonNull TileMode tile // 颜色映射方式) {}

起始点(x, y)和结束点(x, y)决定颜射映射方向和映射范围

  • 如果着色器铺满整个绘制区域,区域有可能是Rect,Circle,Path,最后一个参数颜色映射方式Shader.TileMode会失效
  • 水平方向
mLinearGradient = LinearGradient(mDrawRect.left,mDrawRect.top,mDrawRect.right,mDrawRect.top,mStartColor,mEndColor,Shader.TileMode.MIRROR
)

在这里插入图片描述

  • 竖直方向
mLinearGradient = LinearGradient(mDrawRect.left,mDrawRect.top,mDrawRect.left,mDrawRect.bottom,mStartColor,mEndColor,Shader.TileMode.MIRROR
)

在这里插入图片描述

  • 对角线方向
mLinearGradient = LinearGradient(mDrawRect.left,mDrawRect.top,mDrawRect.right,mDrawRect.bottom,mStartColor,mEndColor,Shader.TileMode.MIRROR
)

在这里插入图片描述

颜色数组IntArray和位置数组FloatArray决定颜色的数量和位置

  • 起始颜色mStartColor和过渡颜色mMiddleColor只作用于[0f, 0.1f]这个区间
  • 过渡颜色mMiddleColor和结束颜色mEndColor只作用于[0.9, 1f]这个区间
  • 过渡颜色mMiddleColor只作用于[0.1f, 0.9f]这个区间
mLinearGradient = LinearGradient(mDrawRect.left,mDrawRect.top,mDrawRect.right,mDrawRect.top,intArrayOf(mStartColor, mMiddleColor,mMiddleColor, mEndColor),floatArrayOf(0f, 0.1f, 0.9f, 1f), Shader.TileMode.MIRROR
)

在这里插入图片描述

映射方式Shader.TileMode决定着色器绘制区域之外的部分如何绘制

  • 着色器绘制区域就是创建LinearGradient的时候指定的
  • Shader.TileMode.CLAMP
    • 作用:边缘填充,只有结束颜色填充绘制区域之外的部分
mLinearGradient = LinearGradient(mDrawRect.left,mDrawRect.top,mDrawRect.right/2,mDrawRect.top,mStartColor, mEndColor,Shader.TileMode.CLAMP
)

在这里插入图片描述

  • Shader.TileMode.REPEAT
    • 作用:重复填充,开始颜色和结束颜色一起填充绘制区域之外的部分
        mLinearGradient = LinearGradient(mDrawRect.left,mDrawRect.top,mDrawRect.right/2,mDrawRect.top,mStartColor, mEndColor,Shader.TileMode.REPEAT)

在这里插入图片描述

  • Shader.TileMode.MIRROR
    • 作用:镜像填充,开始颜色和结束颜色一起填充绘制区域之外的部分
mLinearGradient = LinearGradient(mDrawRect.left,mDrawRect.top,mDrawRect.right/2,mDrawRect.top,mStartColor, mEndColor,Shader.TileMode.MIRROR
)

在这里插入图片描述

关键字:河源网站设计怎么做_郑州平面设计培训速成班_网络营销推广方案论文_如何优化网络

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: