2016-06-01 9 views
-1

私はAndroidプログラミングを初めて使い、簡単な描画アプリケーションを使い始めました。多くのブラウジングの後にいくつかのコードを見つけて照合しましたが、コードは機能していないようです。アプリは白い画面を開きますが、タッチしてドラッグすると何もしません。見える線や何もありません。ちょうど白い画面。Android Drawing app crashing

ここにコードがあります。

package com.drawing.emeraldsoul.drawingapp; 

import android.app.Activity; 
import android.content.res.Resources; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 

class MyView extends View { 
// setup initial color 
private final int paintColor = Color.BLACK; 
// defines paint and canvas 
private Paint drawPaint; 

private Path path = new Path(); 

public MyView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setFocusable(true); 
    setFocusableInTouchMode(true); 
    setupPaint(); 
} 

// Setup paint with color and stroke styles 
private void setupPaint() { 
    drawPaint = new Paint(); 
    drawPaint.setColor(paintColor); 
    drawPaint.setAntiAlias(true); 
    drawPaint.setStrokeWidth(5); 
    drawPaint.setStyle(Paint.Style.STROKE); 
    drawPaint.setStrokeJoin(Paint.Join.ROUND); 
    drawPaint.setStrokeCap(Paint.Cap.ROUND); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, drawPaint); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float pointX = event.getX(); 
    float pointY = event.getY(); 
    // Checks for the event that occurs 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      path.moveTo(pointX, pointY); 
      return true; 
     case MotionEvent.ACTION_MOVE: 
      path.lineTo(pointX, pointY); 
      break; 
     default: 
      return false; 
    } 
    // Force a view to draw again 
    postInvalidate(); 
    return true; 
} 
} 

public class MainActivity extends Activity { 
    public MainActivity() { 
     super(); 
    } 
} 

メインファイルはMainActivityなので、空のコンストラクタでpublicクラスを追加しました。 Viewから継承したMainActivityクラスにペイントコード全体を追加しようとすると、アプリケーションがクラッシュしたり、開始されず、「空のコンストラクタが見つかりません」というエラーが表示されます。だから私はこのようにコード化した。これが正しいかどうかはわかりません。

誰も私が間違っていると教えてもらえますか?事前に

どうもありがとう、 Esash

+0

このMyViewクラスは素晴らしく、すべてですが、MainActivityがそれについてどのように知っていると思いますか?あなたはそれがどこにも含まれていないと言います。同じ宇宙に共存するだけです。たぶん同じPC上でさえ。しかし、それは動作しません:) – Vucko

+0

[カスタムビューの作成](https://developer.android.com/training/custom-views/index.html)をお読みください –

答えて

0

アプリがクラッシュした場合でも「空のコンストラクタが見つからない」というエラーで、起動しません。

私は、Viewクラスの空のコンストラクタが必要だと思います。

public MyView() { 
    // TODO: Maybe place something here? 
} 

public MyView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setFocusable(true); 
    setFocusableInTouchMode(true); 
    setupPaint(); 
} 

しかし、本当の問題は、おそらくあなたがあなたの活動のためのonCreateを持っていないことです。とにかく空のコンストラクタは必要ありません。

public class MainActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.YourLayoutWithMyView); // TODO: Put your layout here 
    } 

} 
0

レンダリングされている、アプリケーションのレイアウトファイルにあなたのMyViewを含めるあなたの中にいることを確認します。
MyViewのインスタンスがレイアウトファイルに含まれた後、テストデバイスのSettings > Developer optionsにアクセスし、Show layout boundsShow touchesを有効にして、この特定のアプリケーションでさらにデバッグできます。

+0

ありがとう、それは働いた。 :) – Esash