Dom*_*icM 9 animation android gradient linear-gradients
我想要为线性渐变的中心设置动画,以便在开始时整个drawable是color1,最后整个drawable是color2,并且在渐变的中心之间从左到右移动.
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT,
new int[] {color1, color2});
gd.setCornerRadius(0f);
gd.setGradientCenter(x, 0);
view.setBackgroundDrawable(gd);
Run Code Online (Sandbox Code Playgroud)
问题是setGradientCenter没有任何区别.根据这个答案/sf/answers/1006878211/ setGradientCenter()存在问题但是这个答案中的解决方案对我不起作用,因为我在用户滑动时更改onTouch()中的渐变他的手指在视野上,所以它需要非常快.
有没有办法做到这一点?
我想做这样的事情(所有触摸的东西都很好但不是动画渐变):

您要求的不是纯线性渐变 - 固定宽度上两种颜色之间的线性渐变只有一个数学函数定义它,这就是您无法更改中心的原因。我认为您正在寻找的是固定的颜色开始和结束,以及它们之间的线性渐变区域。
尝试这个解决方案:
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;
}
});
Run Code Online (Sandbox Code Playgroud)
这段代码似乎反应速度足够快,可以触摸,但确实创建了 LinearGradient 的多个实例。
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |