Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓GradientDrawable可设置GradientCenter_Java_Android_User Interface - Fatal编程技术网

Java 安卓GradientDrawable可设置GradientCenter

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

我试图使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;
            }
        });
    }
}

但梯度中心保持在中心位置。。。没有任何动静。。可能有什么问题?

尝试调用
view.setBackgroundDrawable(drawable)在此之前无效。看起来没有必要这样做,因为您正在获取对已设置为BackgroundDrawable并为其设置属性的引用,但是如果您看到
View.setBackgroundDrawable(drawable)后面的源代码您将看到它还设置了一些标志等等。供参考:


还有一件事需要提及——你正在将初始背景设置为可在其他地方绘制,不是吗?因为如果您没有将初始背景设置为可在其他地方绘制,
test\u view.getBackground()
将返回
null
,您基本上什么也不做。:)

谢谢。我在init()方法的测试视图中设置了drawable。将setBackgroundDrawable(drawable)设置为相同的drawable没有效果。。。但是,当我创建新的GradientDrawable()并使setBackgroundDrawable(这个新的gradien)可用时,所有这些都有效。。但这很糟糕,因为我一直在创建新对象。。似乎是某种缓存可能..我遇到了同样的问题,我一直在创建一个新实例,然后它也不工作。