Android系统。 GradientDrawable setGradientCenter

时间:2012-01-01 22:13:07

标签: java android user-interface

我正在尝试让GradientDrawable动态更改它的渐变中心。 我有简单的测试视图,只是用渐变绘制绘制它的背景。比我写的这样的代码

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;
            }
        });
    }
}

但渐变中心保持在中心位置......没有任何动作..可能出现什么问题? 谢谢你的回答

1 个答案:

答案 0 :(得分:0)

尝试在此无效之前调用view.setBackgroundDrawable(drawable);。看起来没有必要这样做,因为您获得了对已经设置的背景drawable的引用并为其设置了属性,但如果您看到View.setBackgroundDrawable(drawable);后面的源代码,您会看到它也设置了一些旗帜等等。供参考:grepcode

另外要提一下的是 - 你在其他地方设置初始背景可绘制,不是吗?因为如果你没有在其他地方设置初始背景可绘制,test_view.getBackground()将返回null,你基本上什么都不做。 :)