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

Я новичок в 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;
    }

}

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


Ответы (1)


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

path = new Path();

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

person Ted Hopp    schedule 26.02.2013