zoukankan      html  css  js  c++  java
  • androidexercise1compass

    书上的一个例子,一步一步按照树上的做但是还是出现了一点小错误:在catlog中:error openging trace file:No such file or directory(2) 指的是我自定义的view类,并且有inflate错误

    03-12 02:09:57.254: D/AndroidRuntime(789): Shutting down VM
    03-12 02:09:57.254: W/dalvikvm(789): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
    03-12 02:09:57.304: E/AndroidRuntime(789): FATAL EXCEPTION: main
    03-12 02:09:57.304: E/AndroidRuntime(789): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.compassapp/com.example.compassapp.MainActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.compassapp.CompassView
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.os.Handler.dispatchMessage(Handler.java:99)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.os.Looper.loop(Looper.java:137)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.ActivityThread.main(ActivityThread.java:5041)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at java.lang.reflect.Method.invokeNative(Native Method)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at java.lang.reflect.Method.invoke(Method.java:511)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at dalvik.system.NativeStart.main(Native Method)
    03-12 02:09:57.304: E/AndroidRuntime(789): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.compassapp.CompassView
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.view.LayoutInflater.createView(LayoutInflater.java:596)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.Activity.setContentView(Activity.java:1881)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at com.example.compassapp.MainActivity.onCreate(MainActivity.java:12)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.Activity.performCreate(Activity.java:5104)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    03-12 02:09:57.304: E/AndroidRuntime(789):  ... 11 more
    03-12 02:09:57.304: E/AndroidRuntime(789): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
    03-12 02:09:57.304: E/AndroidRuntime(789):  at java.lang.Class.getConstructorOrMethod(Class.java:460)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at java.lang.Class.getConstructor(Class.java:431)
    03-12 02:09:57.304: E/AndroidRuntime(789):  at android.view.LayoutInflater.createView(LayoutInflater.java:561)
    03-12 02:09:57.304: E/AndroidRuntime(789):  ... 22 more
    03-12 02:10:21.435: E/Trace(810): error opening trace file: No such file or directory (2)
    03-12 02:10:22.214: D/AndroidRuntime(810): Shutting down VM
    03-12 02:10:22.214: W/dalvikvm(810): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
    03-12 02:10:22.234: E/AndroidRuntime(810): FATAL EXCEPTION: main
    03-12 02:10:22.234: E/AndroidRuntime(810): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.compassapp/com.example.compassapp.MainActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.compassapp.CompassView
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.os.Handler.dispatchMessage(Handler.java:99)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.os.Looper.loop(Looper.java:137)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.ActivityThread.main(ActivityThread.java:5041)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at java.lang.reflect.Method.invokeNative(Native Method)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at java.lang.reflect.Method.invoke(Method.java:511)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at dalvik.system.NativeStart.main(Native Method)
    03-12 02:10:22.234: E/AndroidRuntime(810): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.compassapp.CompassView
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.view.LayoutInflater.createView(LayoutInflater.java:596)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.Activity.setContentView(Activity.java:1881)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at com.example.compassapp.MainActivity.onCreate(MainActivity.java:12)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.Activity.performCreate(Activity.java:5104)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    03-12 02:10:22.234: E/AndroidRuntime(810):  ... 11 more
    03-12 02:10:22.234: E/AndroidRuntime(810): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
    03-12 02:10:22.234: E/AndroidRuntime(810):  at java.lang.Class.getConstructorOrMethod(Class.java:460)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at java.lang.Class.getConstructor(Class.java:431)
    03-12 02:10:22.234: E/AndroidRuntime(810):  at android.view.LayoutInflater.createView(LayoutInflater.java:561)
    03-12 02:10:22.234: E/AndroidRuntime(810):  ... 22 more

    现贴出代码:

    1。MainActivity

     1 package com.example.compassapp;
     2 
     3 import android.os.Bundle;
     4 import android.app.Activity;
     5 import android.view.Menu;
     6 
     7 public class MainActivity extends Activity {
     8 
     9     @Override
    10     protected void onCreate(Bundle savedInstanceState) {
    11         super.onCreate(savedInstanceState);
    12         setContentView(R.layout.main);
    13         CompassView cv = (CompassView)findViewById(R.id.compassView);
    14     }
    15 
    16     @Override
    17     public boolean onCreateOptionsMenu(Menu menu) {
    18         // Inflate the menu; this adds items to the action bar if it is present.
    19         getMenuInflater().inflate(R.menu.main, menu);
    20         return true;
    21     }
    22 
    23 }

    刚贴完这个发现怪不得初始化有问题。。。cv.setBearing(45)没写。。
    2.compassView

      1 package com.example.compassapp;
      2 
      3 import android.os.Bundle;
      4 import android.app.Activity;
      5 import android.content.Context;
      6 import android.content.res.Resources;
      7 import android.graphics.Canvas;
      8 import android.graphics.Paint;
      9 import android.util.AttributeSet;
     10 import android.view.Menu;
     11 import android.view.View;
     12 
     13 public class CompassView extends View {
     14     private float bearing;
     15     private Paint makerPaint;
     16     private Paint textPaint;
     17     private Paint circlePaint;
     18     private String northString;
     19     private String eastString;
     20     private String southString;
     21     private String westString;
     22     private int textHeight;
     23     
     24     public void setBearing(float _bearing){
     25         bearing = _bearing;
     26     }
     27     
     28     public float getBearing(){
     29         return bearing;
     30     }
     31     public CompassView(Context context){
     32         super(context);
     33         initCompassView();
     34     }
     35     public CompassView(Context context, AttributeSet ats, int defaultStyle){
     36         super(context, ats, defaultStyle);
     37         initCompassView();
     38     }
     39     protected void initCompassView(){
     40         setFocusable(true);
     41         
     42         circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
     43         Resources r = this.getResources();
     44         circlePaint.setColor(r.getColor(R.color.background_color));
     45         circlePaint.setStrokeWidth(1);
     46         circlePaint.setStyle(Paint.Style.FILL_AND_STROKE);
     47         northString = r.getString(R.string.cardinal_north);
     48         eastString = r.getString(R.string.cardinal_east);
     49         southString = r.getString(R.string.cardinal_south);
     50         westString = r.getString(R.string.cardinal_west);
     51         
     52         textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
     53         textPaint.setColor(r.getColor(R.color.text_color));
     54         textHeight = (int)textPaint.measureText("yY");
     55         
     56         makerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
     57         makerPaint.setColor(r.getColor(R.color.marker_color));
     58         
     59     }
     60 
     61     @Override
     62     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
     63         int measureWidth = measure(widthMeasureSpec);
     64         int measureHeight = measure(heightMeasureSpec);
     65         int d = Math.min(measureWidth, measureHeight);
     66         setMeasuredDimension(d,d);
     67     }
     68     
     69     private int measure(int measureSpec){
     70         int result = 0;
     71         int specMode = MeasureSpec.getMode(measureSpec);
     72         int specSize = MeasureSpec.getSize(measureSpec);
     73         
     74         if (specMode == MeasureSpec.UNSPECIFIED){
     75             result = 200;
     76         } else{
     77             result = specSize;
     78         }
     79         return result;
     80     }
     81     
     82     @Override
     83     protected void onDraw(Canvas canvas){
     84         int px = getMeasuredWidth()/2;
     85         int py = getMeasuredHeight()/2;
     86         int radius = Math.min(px, py);
     87         canvas.drawCircle(px, py, radius, circlePaint);
     88         canvas.save();
     89         canvas.rotate(-bearing,px,py);
     90         
     91         int textWidth = (int)textPaint.measureText("W");
     92         int cardinalX = px - textWidth/2;
     93         int cardinalY = py - radius + textHeight;
     94         
     95         for(int i=0; i<24; i++){
     96             canvas.drawLine(px, py-radius, px, py-radius+10, makerPaint);
     97             canvas.save();
     98             canvas.translate(0, textHeight);
     99             
    100             if (i%6 ==0){
    101                 String dirString = "";
    102                 switch (i) {
    103                 case (0) :{
    104                     dirString = northString;
    105                     int arrowY = 2*textHeight;
    106                     canvas.drawLine(px, arrowY, px-5, 3*textHeight, makerPaint);
    107                     break;
    108                 }
    109                 case (6): dirString = eastString; break;
    110                 case (12): dirString = southString; break;
    111                 case (18): dirString = westString;break;
    112                 }
    113                 canvas.drawText(dirString, cardinalX, cardinalY, textPaint);
    114             }
    115             
    116             else if (i % 3 == 0){
    117                 String angle = String.valueOf(i*15);
    118                 float angleTextWidth = textPaint.measureText(angle);
    119                 
    120                 int angleTextX = (int)(px - angleTextWidth/2);
    121                 int angleTextY = py - radius + textHeight;
    122                 canvas.drawText(angle, angleTextX, angleTextY, textPaint);
    123             }
    124             canvas.restore();
    125             canvas.rotate(15,px,py);
    126         }
    127         canvas.restore();
    128     }
    129     
    130     
    131 
    132 }

    3.manifest

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.example.compassapp"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="8"
     9         android:targetSdkVersion="17" />
    10 
    11     <application
    12         android:allowBackup="true"
    13         android:icon="@drawable/ic_launcher"
    14         android:label="@string/app_name"
    15         android:theme="@style/AppTheme" >
    16         <activity
    17             android:name="com.example.compassapp.MainActivity"
    18             android:label="@string/app_name" >
    19             <intent-filter>
    20                 <action android:name="android.intent.action.MAIN" />
    21 
    22                 <category android:name="android.intent.category.LAUNCHER" />
    23             </intent-filter>
    24         </activity>
    25     </application>
    26 
    27 </manifest>

    4.main.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:orientation="vertical"
     5     android:layout_width="fill_parent"
     6     android:layout_height="fill_parent">
     7 
     8     
     9     <com.example.compassapp.CompassView
    10      xmlns:android = "http://schemas.android.com/apk/res/android"
    11         android:id="@+id/compassView"
    12         android:layout_width="fill_parent"
    13         android:layout_height = "fill_parent"
    14         />
    15    
    16 
    17 </LinearLayout>

     最后将activity这样改,就好了。。。即使我使用下一行cv初始化将7,8行顺序呼唤都会出错nullpointerexception 为什么??

    1 @Override
    2     protected void onCreate(Bundle savedInstanceState) {
    3         super.onCreate(savedInstanceState);
    4         CompassView cv = new CompassView(this);
    5 //        CompassView cv = (CompassView)findViewById(R.id.compassView);
    6         
    7         setContentView(cv);
    8         cv.setBearing(45);

     虽然work了但是还是不甘。仔细看了catlog NoSuchMethodException:<init>[class android.Content.Context, interface android.util.AttribureSet]

    所以是少了以context 和 attributeSet为参数的构造函数,加上

    public CompassView(Context context, AttributeSet ats){
            super(context, ats);
            initCompassView();
        }

    但是为什么不认我之前写的那两个构造函数呢?http://blog.csdn.net/z103594643/article/details/6755017

  • 相关阅读:
    实例、数据库和表空间(转载)
    异步邮件阻塞MVC请求
    发布Asp.Net MVC 注意事项
    CWebBrowser2 图片缩放,点击小图看大图
    Web服务器与客户端时差问题
    一些好用的eclipse插件
    ASP.NET Deployment and Configuration Problems
    第二届游戏开发者大会
    MVC 请求参数中带有HTML会引发Validation异常 ("A potentially dangerous Request.Form value was detected from the client")
    网络语言标准实施规范 ISO2009
  • 原文地址:https://www.cnblogs.com/lauraxia/p/2955191.html
Copyright © 2011-2022 走看看