2015-02-23 118 views
0

我正在尝试绘制折线图。 Accualy我成功了,但是当我想在一个活动中显示这个视图时,我得到错误(原因不明的错误)我使用android studio和所有代码在这里。Android自定义视图不能正常工作

我的活动永远不会加载。投掷错误。

查看分类;

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Point; 
import android.view.Display; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Toast; 

import java.security.PublicKey; 

public class DwarView extends View { 

public int[]yuzde; //im getting some values 

Paint paint = new Paint(); 
Paint paint2 = new Paint(); //my paints for drawing 
Paint paint3 = new Paint(); 


public DwarView(Context context) { 
    super(context); 
    paint.setStrokeWidth(6f); 
    paint.setColor(Color.BLACK); 
    paint2.setStrokeWidth(3f); 
    paint2.setColor(Color.BLUE); 
    paint3.setColor(Color.LTGRAY); 
    paint3.setStrokeWidth(2f); 
} 

private float Hesapla(int Yuzde) 
{ 
    float sonuc; 
    sonuc = 500-(500*Yuzde)/100; 
    return sonuc; 
} 

@Override 
public void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    WindowManager wm = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE); 
    Display ekran = wm.getDefaultDisplay(); 
    Point olcu = new Point(); 
    ekran.getSize(olcu); 
    int genislik = olcu.x; 
    int yukseklik = olcu.y; 
    int row = olcu.x/12; 

    canvas.drawLine(row,0,row,500,paint3); 
    canvas.drawLine(row*2,0,row*2,500,paint3); 
    canvas.drawLine(row*3,0,row*3,500,paint3); 
    canvas.drawLine(row*4,0,row*4,500,paint3); 
    canvas.drawLine(row*5,0,row*5,500,paint3); 
    canvas.drawLine(row*6,0,row*6,500,paint3); 
    canvas.drawLine(row*7,0,row*7,500,paint3); 
    canvas.drawLine(row*8,0,row*8,500,paint3); 
    canvas.drawLine(row*9,0,row*9,500,paint3); 
    canvas.drawLine(row*10,0,row*10,500,paint3); 
    canvas.drawLine(row*11,0,row*11,500,paint3); 

    canvas.drawLine(0,100,genislik,100,paint3); 
    canvas.drawLine(0,200,genislik,200,paint3); 
    canvas.drawLine(0,300,genislik,300,paint3); 
    canvas.drawLine(0,400,genislik,400,paint3); 

    canvas.drawLine(0,500,row,Hesapla(yuzde[0]),paint2); 
    canvas.drawLine(row,Hesapla(yuzde[0]),row*2,Hesapla(yuzde[1]),paint2); 
    canvas.drawLine(row*2,Hesapla(yuzde[1]),row*3,Hesapla(yuzde[2]),paint2); 
    canvas.drawLine(row*3,Hesapla(yuzde[2]),row*4,Hesapla(yuzde[3]),paint2); 
    canvas.drawLine(row*4,Hesapla(yuzde[3]),row*5,Hesapla(yuzde[4]),paint2); 
    canvas.drawLine(row*5,Hesapla(yuzde[4]),row*6,Hesapla(yuzde[5]),paint2); 
    canvas.drawLine(row*6,Hesapla(yuzde[5]),row*7,Hesapla(yuzde[6]),paint2); 
    canvas.drawLine(row*7,Hesapla(yuzde[6]),row*8,Hesapla(yuzde[7]),paint2); 
    canvas.drawLine(row*8,Hesapla(yuzde[7]),row*9,Hesapla(yuzde[8]),paint2); 
    canvas.drawLine(row*9,Hesapla(yuzde[8]),row*10,Hesapla(yuzde[9]),paint2); 
    canvas.drawLine(row*10,Hesapla(yuzde[9]),row*11,Hesapla(yuzde[10]),paint2); 
    canvas.drawLine(row*11,Hesapla(yuzde[10]),row*12,Hesapla(yuzde[11]),paint2); 
    canvas.drawLine(0,500,genislik,500,paint); 


    } 
} 

主要活动;

import android.graphics.Color; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity extends ActionBarActivity { 

    DwarView drawView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     drawView = new DwarView(this); 
     drawView.setBackgroundColor(Color.WHITE); 
     drawView.yuzde = new int[] {10,50,60,30,70,100,50,80,90,10,30,50}; 
     setContentView(R.layout.activity_main); 
    } 
} 

主要活动设计XML;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 
    <com.adjans.huskerr.acharttest.DwarView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 


</RelativeLayout> 

AndroidManifest文件;

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.adjans.huskerr.acharttest" > 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/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> 
    </application> 

</manifest> 

logcat的日志;

24 11:48:18.236 23544-23544/com.adjans.huskerr.acharttest D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000 
02-24 11:48:18.236 23544-23544/com.adjans.huskerr.acharttest I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled 
02-24 11:48:18.236 23544-23544/com.adjans.huskerr.acharttest W/dalvikvm﹕ VFY: unable to resolve virtual method 9082: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll()V 
02-24 11:48:18.236 23544-23544/com.adjans.huskerr.acharttest D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e 
02-24 11:48:18.241 23544-23544/com.adjans.huskerr.acharttest I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations 
02-24 11:48:18.241 23544-23544/com.adjans.huskerr.acharttest W/dalvikvm﹕ VFY: unable to resolve virtual method 366: Landroid/content/res/TypedArray;.getChangingConfigurations()I 
02-24 11:48:18.241 23544-23544/com.adjans.huskerr.acharttest D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
02-24 11:48:18.246 23544-23544/com.adjans.huskerr.acharttest I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType 
02-24 11:48:18.246 23544-23544/com.adjans.huskerr.acharttest W/dalvikvm﹕ VFY: unable to resolve virtual method 388: Landroid/content/res/TypedArray;.getType (I)I 
02-24 11:48:18.246 23544-23544/com.adjans.huskerr.acharttest D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
02-24 11:48:18.276 23544-23544/com.adjans.huskerr.acharttest D/AndroidRuntime﹕ Shutting down VM 
02-24 11:48:18.276 23544-23544/com.adjans.huskerr.acharttest W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418f5c08) 
02-24 11:48:18.286 23544-23544/com.adjans.huskerr.acharttest E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.adjans.huskerr.acharttest, PID: 23544 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adjans.huskerr.acharttest/com.adjans.huskerr.acharttest.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class com.adjans.huskerr.acharttest.DwarView 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2436) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
      at android.app.ActivityThread.access$900(ActivityThread.java:170) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5635) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.adjans.huskerr.acharttest.DwarView 
      at android.view.LayoutInflater.createView(LayoutInflater.java:609) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
      at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
      at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
      at com.adjans.huskerr.acharttest.MainActivity.onCreate(MainActivity.java:20) 
      at android.app.Activity.performCreate(Activity.java:5585) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
            at android.app.ActivityThread.access$900(ActivityThread.java:170) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5635) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 
      at java.lang.Class.getConstructorOrMethod(Class.java:472) 
      at java.lang.Class.getConstructor(Class.java:446) 
      at android.view.LayoutInflater.createView(LayoutInflater.java:574) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
            at com.adjans.huskerr.acharttest.MainActivity.onCreate(MainActivity.java:20) 
            at android.app.Activity.performCreate(Activity.java:5585) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
            at android.app.ActivityThread.access$900(ActivityThread.java:170) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5635) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

你使用achartengine? – 2015-02-23 23:44:54

+0

不仅仅是我的包名。 – 2015-02-23 23:48:29

+0

你能否请包括你得到的错误? – vdelricco 2015-02-24 00:29:52

回答

1

跟着this guide。 您尚未实施构造函数。是XML能够使用的观点,你应该从View实现其他2层的构造函数:

public DwarView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public DwarView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

此构造函数添加到您的customView类。

Read this

+0

我怎么能通过attrs这一行? drawView = new DwarView(this,???); – 2015-02-24 10:30:58

+0

在xml中为您的视图添加一个ID,并在您的视图中为findViewById添加一个ID – 2015-02-24 11:10:14

+0

完成!多谢 .. – 2015-02-24 11:32:33

1

要使用自定义视图中的XML,你必须声明一个构造函数有两个参数,在你得到的例外规定:

Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 

像这样:

public DwarView(Context context,android.util.AttributeSet attrs) { 
    super(context,attrs); 
    ... 
} 
+0

我该怎么写secont var? drawView = new DwarView(this,here?); – 2015-02-24 10:18:38

+0

单参数构造函数很好,可以在从代码实例化视图时使用它。这个双参数构造函数是由LayoutInflater用于自动创建视图的。 – Zielony 2015-02-24 11:28:23