2015-04-04 144 views
1

我在我的应用程序中有一个自定义View类。我想扩展它,并把它添加到我的XML文件,但是当我这样做,我得到的类未发现异常..类未找到Android

下面是XML文件:

floorplan.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/floorplannextbutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginRight="47dp" 
     android:layout_marginTop="22dp" 
     android:text="Next" /> 

    <com.example.helloworld3.FloorPlan.DrawView2 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


</RelativeLayout> 

而且这是我的DrawView2类。这是另一个类称为平面图内,但整个代码会太长张贴

DrawView2.java

public class DrawView2 extends RelativeLayout { 
     Paint paint = new Paint(); 

public DrawView2(Context context) { 
      super(context); 
      paint.setColor(Color.RED); 
} 
public void dispatchDraw(Canvas canvas) { 
      super.dispatchDraw(canvas); 
for(int i =0,j=i+1 ; i<subpath.size()&& j<subpath.size(); i++, j++){ 


        ux = subpath.get(i).v.x; 
        dx =subpath.get(i).v.y; 
        rx= subpath.get(j).v.x; 
        lx = subpath.get(j).v.y; 




       canvas.drawLine(ux, dx , rx, lx, paint); 


     } 
} 

这是我得到的logcat的:

04-04 20:37:59.959: D/(884): HostConnection::get() New Host Connection established 0x8b92258, tid 884 
04-04 20:38:07.047: W/KeyCharacterMap(884): No keyboard for id 0 
04-04 20:38:07.047: W/KeyCharacterMap(884): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
04-04 20:38:16.599: D/AndroidRuntime(884): Shutting down VM 
04-04 20:38:16.599: W/dalvikvm(884): threadid=1: thread exiting with uncaught exception (group=0xb5ff94f0) 
04-04 20:38:16.607: E/AndroidRuntime(884): FATAL EXCEPTION: main 
04-04 20:38:16.607: E/AndroidRuntime(884): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helloworld3/com.example.helloworld3.FloorPlan}: android.view.InflateException: Binary XML file line #18: Error inflating class com.example.helloworld3.FloorPlan.DrawView2 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.os.Looper.loop(Looper.java:130) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.reflect.Method.invoke(Method.java:507) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-04 20:38:16.607: E/AndroidRuntime(884): at dalvik.system.NativeStart.main(Native Method) 
04-04 20:38:16.607: E/AndroidRuntime(884): Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class com.example.helloworld3.FloorPlan.DrawView2 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.Activity.setContentView(Activity.java:1657) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.example.helloworld3.FloorPlan.onCreate(FloorPlan.java:164) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
04-04 20:38:16.607: E/AndroidRuntime(884): ... 11 more 
04-04 20:38:16.607: E/AndroidRuntime(884): Caused by: java.lang.ClassNotFoundException: com.example.helloworld3.FloorPlan.DrawView2 in loader dalvik.system.PathClassLoader[/data/app/com.example.helloworld3-1.apk] 
04-04 20:38:16.607: E/AndroidRuntime(884): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.createView(LayoutInflater.java:471) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570) 
04-04 20:38:16.607: E/AndroidRuntime(884): ... 20 more 

而且是我的清单文件:

AndroidManifes。 xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.helloworld3" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".FloorPlan" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="com.example.helloworld3.FLOORPLAN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".FloorPlanTwo" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="com.example.helloworld3.FLOORPLANTWO" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".FloorPlanThree" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="com.example.helloworld3.FLOORPLANTHREE" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

谢谢大家的帮助!

+0

如果您注释掉'这是否工作paint.setColor()'? – natario 2015-04-04 20:51:21

回答

2

如果DrawView2是一个内部类,应该在XML被称为:我有类似你这样的问题

... 
<com.example.helloworld3.FloorPlan$DrawView2 
android:layout_width="match_parent" 
android:layout_height="match_parent"/> 
... 
+0

谢谢你的回答。当我将 出现错误时,需要按属性进行操作,>或/> – 2015-04-04 21:00:42

+0

抱歉,我误导了您。当然,我只提到了开始。整个标签与您的代码相同,您只需更改“。”。 (点)到“$”。 – AndroidEx 2015-04-04 21:03:40

+0

谢谢,但我仍然得到相同的错误 – 2015-04-04 21:11:32

0

。请尝试以下两件事情:

  1. 扩展的查看,而不是从RelativeLayout的

  2. 这些构造函数添加到您的DrawView2类

    public DrawView2(Context context) 
    { 
        super(context); 
    } 
    
    public DrawView2(Context context, AttributeSet attrs) 
    { 
        super(context, attrs); 
    
    } 
    
    public DrawView2(Context context, AttributeSet attrs, int defStyleAttr) 
    { 
        super(context, attrs, defStyleAttr); 
    }