2016-06-01 4 views
-1

Android 프로그래밍에 익숙하지 않고 간단한 드로잉 앱으로 시작되었습니다. 많은 브라우징을 한 후에 코드를 찾아서 대조했지만 코드가 작동하지 않는 것 같습니다. 앱이 흰색 화면으로 열리지 만 터치하고 끌면 아무 것도하지 않습니다. 보이지 않을 선들이 없습니다. 그냥 흰색 화면.Android 드로잉 앱이 충돌 함

다음은 코드입니다.

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이므로 빈 생성자를 사용하여 공용 클래스를 추가했습니다. 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

관련 문제