android.view.InflateException:二进制XML文件行#94:膨胀类时出错



在尝试在我的应用程序中实现micode开源指南针时遇到轻微的通货膨胀问题。所以我正在想办法解决这个问题。再看一双眼睛就好了。所以我们开始了:

这是与之相关的类:

package styckz.com.clearpicturemode;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
public class CompassView extends ImageView {
private float mDirection;
private Drawable compass;
public CompassView(Context context) {
    super(context);
    mDirection = 0.0f;
    compass = null;
}
public CompassView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mDirection = 0.0f;
    compass = null;
}
public CompassView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mDirection = 0.0f;
    compass = null;
}
@Override
protected void onDraw(Canvas canvas) {
    if (compass == null) {
        compass = getDrawable();
        compass.setBounds(0, 0, getWidth(), getHeight());
    }
    canvas.save();
    canvas.rotate(mDirection, getWidth() / 2, getHeight() / 2);
    compass.draw(canvas);
    canvas.restore();
}
public void updateDirection(float direction) {
    mDirection = direction;
    invalidate();
}
}

所以我们来了。。。根据另一个线程中的请求,我尝试将上面的类从公共类转换为静态类,但没有成功。。。也许我做错了什么?所做的只是使类名在其下方突出显示红色,并声明static无效。

有什么想法吗?

这是布局XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background" >
    <LinearLayout
        android:id="@+id/view_compass"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/background_light"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:orientation="vertical" >
            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/prompt" >
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="70dip"
                    android:orientation="horizontal" >
                    <LinearLayout
                        android:id="@+id/layout_direction"
                        android:layout_width="0dip"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:gravity="right"
                        android:orientation="horizontal" >
                    </LinearLayout>
                    <ImageView
                        android:layout_width="20dip"
                        android:layout_height="fill_parent" >
                    </ImageView>
                    <LinearLayout
                        android:id="@+id/layout_angle"
                        android:layout_width="0dip"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:gravity="left"
                        android:orientation="horizontal" >
                    </LinearLayout>
                </LinearLayout>
            </FrameLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:orientation="vertical" >
                <FrameLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center" >
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:src="@drawable/background_compass" />
                    <net.micode.compass.CompassView
                        android:id="@+id/compass_pointer"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:src="@drawable/compass" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:src="@drawable/miui_cover" />
                </FrameLayout>
            </LinearLayout>
        </LinearLayout>
        <FrameLayout
            android:id="@+id/location_layout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/background_bottom"
                android:orientation="vertical" >
            </LinearLayout>
            <TextView
                android:id="@+id/textview_location"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/getting_location"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#7FFFFFFF" />
        </FrameLayout>
    </LinearLayout>
</FrameLayout>
<include
    android:id="@+id/low_accuracy_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center_horizontal"
    android:layout_marginBottom="35dip"
    layout="@*android:layout/transient_notification"
    android:visibility="gone" />

这里还有末日的日志:

11-22 14:22:30.667: E/AndroidRuntime(16140): FATAL EXCEPTION: main
11-22 14:22:30.667: E/AndroidRuntime(16140): java.lang.RuntimeException: Unable to start     activity        ComponentInfo{styckz.com.clearpicturemode/styckz.com.clearpicturemode.CompassActivity}:   android.view.InflateException: Binary XML file line #94: Error inflating class  net.micode.compass.CompassView
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.os.Looper.loop(Looper.java:137)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.main(ActivityThread.java:5103)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.reflect.Method.invokeNative(Native Method)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.reflect.Method.invoke(Method.java:525)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at dalvik.system.NativeStart.main(Native Method)
11-22 14:22:30.667: E/AndroidRuntime(16140): Caused by: android.view.InflateException: Binary XML file line #94: Error inflating class net.micode.compass.CompassView
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.Activity.setContentView(Activity.java:1895)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at styckz.com.clearpicturemode.CompassActivity.onCreate(CompassActivity.java:99)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.Activity.performCreate(Activity.java:5133)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
11-22 14:22:30.667: E/AndroidRuntime(16140):    ... 11 more
11-22 14:22:30.667: E/AndroidRuntime(16140): Caused by: java.lang.ClassNotFoundException: Didn't find class "net.micode.compass.CompassView" on path: DexPathList[[zip file "/data/app/styckz.com.clearpicturemode-2.apk"],nativeLibraryDirectories=[/data/app-lib/styckz.com.clearpicturemode-2, /vendor/lib, /system/lib]]
11-22 14:22:30.667: E/AndroidRuntime(16140):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.createView(LayoutInflater.java:559)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
11-22 14:22:30.667: E/AndroidRuntime(16140):    ... 26 more

问题是xml中的路径错误。

CompassView位于net.micode.compass.中,但它实际上位于styckz.com.clearpicturemode

所以在你的xml 中更改它

这个

<net.micode.compass.CompassView
   android:id="@+id/compass_pointer"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:src="@drawable/compass" />

应该看起来像这个

<styckz.com.clearpicturemode.CompassView
   android:id="@+id/compass_pointer"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:src="@drawable/compass" />

相关内容

最新更新