2013-02-26 4 views
0

나는 안드로이드의 새로운 초보자이며, 터치 좌표를 감지하고 원과 터치 경로를 그려주는 간단한 프로그램을 만들고 싶다. 나는 터치를 따라 원을 그어 따르는 간단한 프로그램을 만든다. 그러나 나는 여전히 터치의 길을 할 수 있습니다. 내가 경로로 프로그램을 시작하면 나는 그것이 정상 작동 경로를 제거 할 때 당신은 path 초기화되지 않습니다 ...캔버스 드로잉 경로 in 안드로이드

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는 터치 스크린을 그리는 동그라미의 중심이며, 프로그램이 터치를 감지하고 화면의 좌표를 표시하고 siwpe touch의 터치와 경로 주위에 원을 그려야합니다. – user2112285

+0

알아 냈습니다. 나는'x'와'y'가 선언 된 곳이 아닌 그들이 사용 된 곳을 물었다. 직면 한 문제에 대해 좀 더 자세하게 설명해야합니다. 코드를 실행할 때 실제로 어떤 일이 일어나는지 설명하지 않았습니다. 원이 그려져 있습니까? 터치가 움직일 때 움직이는가? 그렇다고해서 내 게시물이 "내 코드가 있습니다. 작동하지 않습니다. 어떻게 해결할 수 있습니까?" –

답변

0

충돌. 대부분 프로그램은 NullPointerException과 충돌합니다. CustomView 생성자 내에서이 추가보십시오 : 앞으로

path = new Path(); 

, 당신이 당신의 안드로이드 프로그램 충돌에 대해 게시 할 때, 당신이 충돌에서 로그 캣 출력을 게시하는 경우가 가장 도움이 될 것입니다.

+0

thx 많은 친구가 앱을 작동시킵니다. – user2112285