2016-06-01 5 views
-1

Я новичок в программировании на Android и начал работать с простым графическим приложением. Я нашел и сопоставил код после многократного просмотра, но код, похоже, не работает. Приложение открывается с белым экраном, но ничего не делает, когда я касаюсь и перетаскиваю. Никаких строк или чего-либо еще не видно. Просто белый экран.Приложение для Android Drawing 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 и, следовательно, я добавил открытый класс с пустым конструктором. Если я попробую добавить весь код краски в классе MainActivity, простирающемся от View, тогда приложение выйдет из строя, даже не запустится с ошибкой, говорящей, что «пустой конструктор не найден». Поэтому я закодировал этот путь. Я не уверен, что это правильно.

Может кто-нибудь скажет мне, где я иду не так?

Спасибо большое, заранее Esash

+0

Ну, этот класс MyView замечательный, и все, кроме как вы ожидаете, что MainActivity узнает об этом? Вы говорите, что не включили его нигде в него. Он просто сосуществует в одной и той же вселенной. Может быть, даже на том же компьютере. Но это не делает работу :) – 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 bounds и Show touches для дополнительной отладки с этим конкретным приложением.

+0

Спасибо большое, это сработало. :) – Esash