将视图背景设置为渐变时出现空指针异常



我一直面临着一个很奇怪的问题。我看不到我设计的UI的预览。我正在尝试将视图的背景设置为渐变定义。我不知道是什么引起这个问题的。下面是UI xml和Gradient xml的代码。

渐变XML, vertical_fade.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    android:shape="line" xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient 
        android:startColor="#ffffff"
        android:centerColor="#000000"
        android:endColor="#ffffff"
        android:angle="270"/>
</shape>

和uitxml的代码,这个xml是列表行的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:fadingEdgeLength="5dp"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:paddingRight="?android:attr/scrollbarSize" >
    <ImageView 
        android:id="@+id/contact_type_icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:src="@drawable/call"
        android:layout_margin="2dp" 
        />
    <View
        android:id="@+id/type_divider"
        android:layout_width="3dp"
        android:layout_height="fill_parent"
        android:background="@drawable/vertical_fade"
        android:layout_marginLeft="3dp" />
    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:paddingLeft="4dp"
        android:layout_weight="6">
        <TextView 
            android:id="@+id/detail_type"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="Detail_Type" />
        <TextView
            android:id="@+id/detail_detail"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:text="Detail_Detail" />
    </LinearLayout>
    <LinearLayout 
        android:gravity="right"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1">
    <View 
        android:id="@+id/type_divider_secondary"
        android:layout_width="3dp"
        android:layout_height="fill_parent"
        android:background="@drawable/vertical_fade"
        android:layout_marginRight="3dp"
        />
    <ImageView
        android:id="@+id/second_action"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:src="@drawable/sms" 
        android:layout_gravity="right"
        android:layout_margin="2dp" />
    </LinearLayout>
</LinearLayout>

在UI中,使用的两个视图是我接收错误的点。

嗯,LogCat在说

  03-05 23:47:42.886: E/AndroidRuntime(717): java.lang.NullPointerException
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.graphics.Canvas.drawLine(Canvas.java:809)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.graphics.drawable.GradientDrawable.draw(GradientDrawable.java:349)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.View.draw(View.java:6865)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.widget.AbsListView.dispatchDraw(AbsListView.java:1480)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.widget.ListView.dispatchDraw(ListView.java:3138)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.View.draw(View.java:6986)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.widget.AbsListView.draw(AbsListView.java:2584)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.View.draw(View.java:6883)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.widget.FrameLayout.draw(FrameLayout.java:357)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.View.draw(View.java:6883)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.widget.FrameLayout.draw(FrameLayout.java:357)
03-05 23:47:42.886: E/AndroidRuntime(717):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewRoot.draw(ViewRoot.java:1522)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.os.Looper.loop(Looper.java:123)
03-05 23:47:42.886: E/AndroidRuntime(717):  at android.app.ActivityThread.main(ActivityThread.java:3683)
03-05 23:47:42.886: E/AndroidRuntime(717):  at java.lang.reflect.Method.invokeNative(Native Method)
03-05 23:47:42.886: E/AndroidRuntime(717):  at java.lang.reflect.Method.invoke(Method.java:507)
03-05 23:47:42.886: E/AndroidRuntime(717):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-05 23:47:42.886: E/AndroidRuntime(717):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-05 23:47:42.886: E/AndroidRuntime(717):  at dalvik.system.NativeStart.main(Native Method)

错误是与shape="line"。

使用下面的代码渐变背景:

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape>
        <gradient
            android:angle="90"
            android:startColor="#ffffff"
            android:centerColor="#000000"
            android:endColor="#ffffff"
            android:type="linear" />
    </shape>
</item>
</selector>

最新更新