Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Путь рисования холста в Android

Автор вопроса: user2112285Ответов: 1

Я новичок в Android, и я хочу сделать простую программу, которая определяет координаты касания и рисует круг и путь касания, я делаю простую программу, которая рисует круг вокруг касания и следует за ним, но я все еще могу сделать путь осязания. Когда я запускаю программу с путем, она вылетает, когда я удаляю путь, она работает нормально...

public class MainActivity extends Activity {

    float x = 0;
    float y = 0;
    LinearLayout layout; //declarea variabilor pentru desenarea cercului

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //specificarea
        layout = (LinearLayout)findViewById(R.id.layout); //gasirea id
        layout.addView(new CustomView(MainActivity.this));
    }

    public class CustomView extends View { //crearea unei mape pentru canvas
        Bitmap mBitmap;
        Paint paint;
        Path path;

        public CustomView(Context context) {
        super(context);
        mBitmap = Bitmap.createBitmap(640, 1024, Bitmap.Config.ARGB_8888);
            paint = new Paint();
            path = new Path();
            paint.setColor(Color.BLUE);//culoare cercului desenat
            paint.setStyle(Style.FILL);
        }

    protected void onDraw(Canvas canvas) {//desenarea cercului la atingere
        super.onDraw(canvas);
        canvas.drawPath(path,paint);
        canvas.drawCircle(x, y, 25, paint);
    }

    public boolean onTouchEvent(MotionEvent event) {

        int action = event.getAction();

        switch (action){
            case MotionEvent.ACTION_DOWN:
                path.moveTo(event.getX(), event.getY());
                path.lineTo(event.getX(), event.getY());
                break;
            case MotionEvent.ACTION_MOVE:
                x = event.getX();
                y = event.getY();
                path.lineTo(x, y);
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                path.lineTo(event.getX(), event.getY());
                break;
            case MotionEvent.ACTION_CANCEL:
                break;
            default:
            break;
        }
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
  • Где объявлены x и y? Что происходит с вашим кодом и что должно произойти? Ted Hopp 26.02.2013
  • x и y для центра круга, который рисуется при касании экрана, программа должна обнаруживать касание и отображать координаты экрана, а также рисовать круг вокруг касания и путь для касания. user2112285 26.02.2013
  • Я понял. Я спросил, где объявлены x и y, а не для чего они используются. Вам нужно предоставить немного больше деталей о проблеме, с которой вы столкнулись. Вы не объяснили, что на самом деле происходит, когда вы запускаете свой код. Круг вообще рисуется? Двигается ли он при касании? Как бы то ни было, ваш пост не намного лучше, чем Вот мой код. Это не работает. Как я могу это исправить? Ted Hopp 26.02.2013
  • извините, я только что добавил объявление x и y, проблема в том, что это не сработало, когда я пытаюсь нарисовать Path, если я удалю его из кода, он сработает, он обнаружит мое касание и будет следовать за ним при движении на экране. user2112285 26.02.2013
  • Когда вы пытаетесь нарисовать path, что происходит? Программа вылетает? Ничего не нарисовано (даже круг)? Или дело в том, что путь не отображается, а все остальное работает так же? Ted Hopp 26.02.2013
  • когда я запускаю программу с путем, она вылетает, когда я удаляю путь, она работает нормально user2112285 26.02.2013

androidjavaandroid-canvas

Ответы

Ответ 1 · Ted Hopp

Вы не инициализируете path. Скорее всего, ваша программа падает с ошибкой NullPointerException. Попробуйте добавить это в конструктор CustomView:

path = new Path();

В будущем, когда вы будете публиковать сообщение о сбое вашей программы Android, было бы очень полезно опубликовать вывод logcat после сбоя.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы