2013-02-26 5 views
0

Я новичок в андроиде, и я хочу сделать простую программу, которая обнаруживает сенсорные координаты и нарисовать круг и тропу прикосновения. Я делаю простую программу, которая рисует круг вокруг прикосновения и следую но я все еще могу сделать тропу. Когда я начинаю программу с путем его падением, когда я удалить путь он работает нормально ...Canvas draw path in 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; 
    } 

} 
+0

Где объявляются 'x' и' y'? Что происходит с вашим кодом и что должно произойти? –

+0

x и y для центра круга, который нарисован при использовании сенсорного экрана, программа должна обнаруживать касание и показывать координаты экрана и рисовать круг вокруг касания и путь для сильного касания – user2112285

+0

Я получил это. Я спросил, где объявляются 'x' и' y', а не то, для чего они используются. Вам нужно предоставить более подробную информацию о проблеме, с которой вы столкнулись. Вы не объяснили, что на самом деле происходит при запуске вашего кода. Нарисован ли круг? Движется ли он, когда происходит движение касания? Как бы то ни было, ваш пост не намного лучше, чем «Вот мой код. Он не работает. Как его исправить?» –

ответ

0

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

path = new Path(); 

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

+0

thx много друг, он делает работу приложения – user2112285