在这里参考我的第一个问题(Android:通过代码更改线性 GradientDrawable 的中心),我仍在努力尝试更改背景的渐变中心。
基本上,我想根据系统音量更改背景中线性渐变的中心。所以如果用户改变音量,渐变要么是(#1)重绘,要么是(#2)改变位置:
到 #1:有一个使用着色器工厂的线性渐变的解决方法
ShapeDrawable.ShaderFactory sf=new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
return new LinearGradient(0, 0, width, height,
new int[]{Color.WHITE, Color.GRAY, Color.BLACK},
new float[]{0,0.5f,1}, Shader.TileMode.MIRROR);
}
};
但是这个解决方案的问题是,有几种不同的渐变模式,并且每次音量变化时背景都会改变和重绘......因为它是一个流应用程序,我不确定这种情况下的性能
所以我来到解决方案#2。如果选择了每个线性渐变,我会绘制一次,例如在大于设备屏幕的视图中绘制它。
现在,如果用户改变音量,屏幕只是在 Y 轴上移动。但是,我尝试使用线性渐变和着色器工厂,但每次背景视图渐变都与屏幕设备一样大而不是更大。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y + 500; //change height to higher than parentview
//get a background and change layout (tried with view,relativelayout as well)
LinearLayout backgroundGradientView = (LinearLayout)
findViewById(R.id.player_backgroundGradient);
backgroundGradientView.getLayoutParams().width = width;
backgroundGradientView.getLayoutParams().height = height;
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, new int[] { startColor, endColor });
backgroundGradientView.setBackground(gd);
//later, i m changing the Y Value, but the background is as big as the parent
backgroundGradientView.setY(currentY + 100)
任何人有任何想法如何改变这个?我真的不知道如何解决这个案子?!