方法一:
这种方法的三角形角度没法控制,因为其实是矩形旋转。
android:fromDegrees="45"
android:pivotX="135%"
android:pivotY="15%">
android:width="16dp"
android:height="16dp" />
然后将此xml设置为控件的background,在代码中,如下使用:
LayerDrawable layerDrawable = (LayerDrawable) view.getBackground();
GradientDrawable drawable = (GradientDrawable)layerDrawable.getDrawable(0);
drawable.setColor(mainColor);
注意:当xml使用的是标签,代码中可直接
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绘图机制