无法创建径向渐变

时间:2015-06-03 22:33:03

标签: android android-layout

我正在尝试创建一个带有径向渐变的按钮,但每次加载我的应用时,它都会崩溃。

mylayout.xml:

...

<Button
    android:id="@+id/mybutton"
    android:layout_width="@dimen/btnwidth"
    android:layout_height="@dimen/btnheight"
    android:background="@drawable/mybutton" />

...

mybutton.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval">

            <gradient
                android:type="radial"
                android:startColor="@color/my_start_color"
                android:endColor="@color/my_end_color"/>
        </shape>
    </item>
</layer-list>

以下是错误日志。我的目标是Android SDK 22.

  

FATAL EXCEPTION:main java.lang.RuntimeException:无法启动   活动ComponentInfo {com.my.app/com.my.app.MyActivity}:   android.view.InflateException:二进制XML文件行#324:错误   膨胀班按钮在   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)     在   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)     在android.app.ActivityThread.access $ 800(ActivityThread.java:155)at   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317)     在android.os.Handler.dispatchMessage(Handler.java:102)at   android.os.Looper.loop(Looper.java:135)at   android.app.ActivityThread.main(ActivityThread.java:5343)at   java.lang.reflect.Method.invoke(Native Method)at   java.lang.reflect.Method.invoke(Method.java:372)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)     在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)   引起:android.view.InflateException:二进制XML文件行#324:   在类按钮上输入错误   android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)     在android.view.LayoutInflater.rInflate(LayoutInflater.java:806)at   android.view.LayoutInflater.inflate(LayoutInflater.java:504)at   android.view.LayoutInflater.inflate(LayoutInflater.java:414)at   com.my.app.ui.MyFragment.onCreateView(MyFragment.java:183)at at   android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)     在   android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:924)     在   android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1116)     在   android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1218)     在   android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2170)     在   android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300)     在   android.support.v7.app.AppCompatDelegateImplV7.callActivityOnCreateView(AppCompatDelegateImplV7.java:816)     在   android.support.v7.app.AppCompatDelegateImplV11.callActivityOnCreateView(AppCompatDelegateImplV11.java:72)     在   android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:804)     在   android.support.v4.view.LayoutInflaterCompatHC $ FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)     在   android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)     在android.view.LayoutInflater.rInflate(LayoutInflater.java:806)at   android.view.LayoutInflater.rInflate(LayoutInflater.java:809)at   android.view.LayoutInflater.inflate(LayoutInflater.java:504)at   android.view.LayoutInflater.inflate(LayoutInflater.java:414)at   android.view.LayoutInflater.inflate(LayoutInflater.java:365)at   android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)     在   android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)     在com.my.app.MyActivity.onCreate(MyActivity.java:1033)at   android.app.Activity.performCreate(Activity.java:6010)at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)     在   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)     ... 10更多引起:   android.content.res.Resources $ NotFoundException:File   来自可绘制资源ID#0x7f02008a的res / drawable-hdpi / mybutton.xml     在   android.content.res.Resources.loadDrawableForCookie(Resources.java:2482)     在android.content.res.Resources.loadDrawable(Resources.java:2384)     在android.content.res.TypedArray.getDrawable(TypedArray.java:749)     在android.view.View。(View.java:3742)at   android.widget.TextView。(TextView.java:637)at   android.widget.Button。(Button.java:111)at   android.widget.Button。(Button.java:107)at   android.support.v7.widget.AppCompatButton。(AppCompatButton.java:60)     在   android.support.v7.widget.AppCompatButton。(AppCompatButton.java:56)     在android.support.v7.internal.app.AppCompatViewInflater.createView

2 个答案:

答案 0 :(得分:4)

您需要一个渐变半径:

<gradient
    android:type="radial"
    android:gradientRadius="40"
    android:startColor="@color/my_start_color"
    android:endColor="@color/my_end_color"/>

答案 1 :(得分:0)

你可以尝试使用它:

定义bg_button.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/mybutton" android:state_pressed="true" />
    <item android:drawable="@drawable/mybutton" />
</selector>

在那里你也可以定义一个按下状态。当你使用按钮时,这是有道理的。

这将是你的mybutton.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <gradient
        android:type="radial"
        android:startColor="@color/my_start_color"
        android:endColor="@color/my_end_color"/>
</shape>

最后你必须将bg_button设置为按钮的背景:

<Button
    android:id="@+id/mybutton"
    android:layout_width="@dimen/btnwidth"
    android:layout_height="@dimen/btnheight"
    android:background="@drawable/bg_button" />