gpt4 book ai didi

android - LinearGradient中心动画

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:48 26 4
gpt4 key购买 nike

我想为线性渐变的中心设置动画,以便在开始时整个可绘制对象为 color1,最后整个可绘制对象为 color2,并且在渐变中心之间从左向右移动。

GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT,
new int[] {color1, color2});
gd.setCornerRadius(0f);
gd.setGradientCenter(x, 0);
view.setBackgroundDrawable(gd);

问题是 setGradientCenter 没有任何区别。根据这个答案 https://stackoverflow.com/a/14383974/1395697 setGradientCenter() 存在问题,但此答案中的解决方案对我不起作用,因为当用户在 View 上滑动手指时我更改了 onTouch() 中的渐变,因此它需要非常快。

有办法吗?

我想做这样的事情(所有触摸效果都很好,但动画渐变效果不好):

enter image description here

最佳答案

您要求的不是纯线性渐变 - 固定宽度上两种颜色之间的线性渐变只有一个定义它的数学函数,这就是您无法更改中心的原因。我认为您正在寻找的是固定颜色的开始和结束,以及它们之间的线性渐变区域。

试试这个解决方案:

    sf = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0, 0, view.getWidth(), 0, new int[] {Color.WHITE, Color.BLACK}, //substitute the correct colors for these
new float[] {center - 0.3f, center + 0.3f}, Shader.TileMode.REPEAT);
return lg;
}
};
p = new PaintDrawable();
rectShape = new RectShape();
p.setShape(rectShape);
p.setShaderFactory(sf);
view.setBackgroundDrawable((Drawable) p);
view.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
center = event.getX() / view.getWidth(); // calculate the center
p.setShape(rectShape); // this makes the shader recreate the lineargradient
return true;
}
});

这段代码似乎 react 快到可以触摸,但确实创建了 LinearGradient 的多个实例。

关于android - LinearGradient中心动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21403101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com