Java 安卓GradientDrawable可设置GradientCenter
我试图使GradientDrawable动态更改其渐变中心。 我有一个简单的测试视图,它只是用渐变绘制背景。然后我写了这样的代码:Java 安卓GradientDrawable可设置GradientCenter,java,android,user-interface,Java,Android,User Interface,我试图使GradientDrawable动态更改其渐变中心。 我有一个简单的测试视图,它只是用渐变绘制背景。然后我写了这样的代码: public class TestActivity extends Activity { protected TestView test_view; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns
public class TestActivity extends Activity {
protected TestView test_view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
test_view = (TestView)findViewById(R.id.test_view);
test_view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX()/TestView.WND_WIDTH;
float y = event.getY()/TestView.WND_HEIGHT;
Log.i("zim32", String.valueOf(x));
GradientDrawable drawable = (GradientDrawable)test_view.getBackground();
drawable.setGradientCenter(x, y);
test_view.invalidate();
return true;
}
});
}
}
但梯度中心保持在中心位置。。。没有任何动静。。可能有什么问题?尝试调用
view.setBackgroundDrawable(drawable)代码>在此之前无效。看起来没有必要这样做,因为您正在获取对已设置为BackgroundDrawable并为其设置属性的引用,但是如果您看到View.setBackgroundDrawable(drawable)后面的源代码代码>您将看到它还设置了一些标志等等。供参考:
还有一件事需要提及——你正在将初始背景设置为可在其他地方绘制,不是吗?因为如果您没有将初始背景设置为可在其他地方绘制,test\u view.getBackground()
将返回null
,您基本上什么也不做。:) 谢谢。我在init()方法的测试视图中设置了drawable。将setBackgroundDrawable(drawable)设置为相同的drawable没有效果。。。但是,当我创建新的GradientDrawable()并使setBackgroundDrawable(这个新的gradien)可用时,所有这些都有效。。但这很糟糕,因为我一直在创建新对象。。似乎是某种缓存可能..我遇到了同样的问题,我一直在创建一个新实例,然后它也不工作。