改变形状XML Android的颜色

时间:2017-03-16 21:21:08

标签: java android xml shape

好吧,伙计们,这是非常愚蠢的事情,但我无法理解。

我正在尝试更改Handmade circle.xml类的颜色,但我不能,而且我无法理解背后的原因。

我很确定我使用了错误的方法来做到这一点。

这是一些代码。这是一个onClick()方法,它应该改变我的圆形可绘制“按钮”的颜色。

Circle.xml

   <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <solid android:color="#e42828"/>
            <stroke android:color="#3b91d7" android:width="0dp"/>
            <size android:width="250dp" android:height="250dp"/>
        </shape>
    </item>
</selector>

Activity.java

        recplay_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            GradientDrawable background = (GradientDrawable)recplay_button.getBackground();
            background.setColor(getResources().getColor(R.color.accent));
        }
    });

好的,这是例外:

03-16 22:09:46.546 18305-18305/com.example.cesarsk.say_it E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: com.example.cesarsk.say_it, PID: 18305
                                                                        java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.GradientDrawable
                                                                            at com.example.cesarsk.say_it.PlayActivity$3.onClick(PlayActivity.java:160)
                                                                            at android.view.View.performClick(View.java:5669)
                                                                            at android.view.View$PerformClick.run(View.java:22539)
                                                                            at android.os.Handler.handleCallback(Handler.java:751)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:154)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6290)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Xml定义了我的按钮:

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/buttons_bar">

        <Button
            android:id="@+id/recplay_button"
            android:layout_width="96dp"
            android:layout_height="96dp"
            android:background="@drawable/circle"
            android:backgroundTint="@color/primary_dark"
            android:layout_centerInParent="false"
            />
            </RelativeLayout>

我认为它不起作用的原因与我手动创建Shape的事实有关,所以我没有办法让自己与它接口。

起初,我试图做

 `View v = findViewById(R.id.rect4);
v.setBackground(R.drawable.rectangle);

并且颜色发生了变化,但它也改变了我的形状,所以我不能使用它,或者我应该以不同的方式使用它。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

尝试使用

替换onClickListner中的代码
~/.gitignore

答案 1 :(得分:0)

如果您使用api 23&gt; getColor()已被弃用。相反,有 getColor(int id,Theme theme)。或者在你的情况下ContextCompat.getColor(context, R.color.color_name) 你也没有提到你是否想要改变颜色onClick,因为如果你不需要setOnClickListener

即使不推荐使用getColor,最终答案如果你只是更正了

,它也会在你的代码中起作用
GradientDrawable background =(GradientDrawable)button1.getBackground().getCurrent();

它对我有用