Android绘制一个三角形并且可动态改变颜色

方法一:

这种方法的三角形角度没法控制,因为其实是矩形旋转。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- 倒三角 -->  
    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="135%"
            android:pivotY="15%">
            <shape android:shape="rectangle">
                <size
                    android:width="16dp"
                    android:height="16dp" />
                <solid android:color="#7d72ff" />
            </shape>
        </rotate>
    </item>
</layer-list>

然后将此xml设置为控件的background,在代码中,如下使用:

LayerDrawable layerDrawable = (LayerDrawable) view.getBackground();
GradientDrawable drawable = (GradientDrawable)layerDrawable.getDrawable(0);
drawable.setColor(mainColor);

注意:当xml使用的是<shape>标签,代码中可直接

GradientDrawable drawable = (GradientDrawable)view.getBackground();

而当使用的是layer-list时,需要先使用LayerDrawable,然后要用第几个item,就getDrawable(i); i为shape的顺序

方法二:

使用SVG,android5.0以上开始支持SVG,也有兼容包支持以前的版本,或者使用第三方开源库(svg-android,lottio)

使用方法就是DrawableCompat.setTint

关于SVG的生成与动画,
VectorDrawableCompat vectorDrawableCompat = VectorDrawableCompat.create(getResources(), R.drawable.ic_home_black_24dp, getTheme());
  //你需要改变的颜色
vectorDrawableCompat.setTint(getResources().getColor(R.color.color_blue));
YourImageView.setImageDrawable(vectorDrawableCompat)

方法三:

自定义View,Canvas绘制,这种比较自由,也最简单,简单的图形还是用这个比较好。

protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint p = new Paint();
        p.setColor(Color.BLACK);
        //实例化路径
        Path path = new Path();
        path.moveTo(80, 200);// 此点为多边形的起点
        path.lineTo(120, 250);
        path.lineTo(80, 250);
        path.close(); // 使这些点构成封闭的多边形
        canvas.drawPath(path, p);

    }

然后在你的布局文件中直接使用,预览没有效果,需要先build一下工程。

参考链接:

Android 通过 shape 实现三角形气泡效果

Android自定义控件提供颜色属性动态改变控件颜色

Android svg 绘制三角形

代码动态改变SVG矢量图颜色

SVG-Android开源库

Android 中使用 SVG 的一个坑

Android绘图机制



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值