2012-08-07 5 views
0

안녕하세요 저는 안드로이드 개발에 초보자입니다. 응용 프로그램과 같은 페인트를 개발하고 있습니다. 나는 이미 캔버스에 몇 가지 포인트를 그렸다. 이제 나는이 점들 사이에 손가락을 통해 선을 그 으려 고합니다. 어떻게 할 수 있는지 알지 못합니다. Google지도를 사용하지 않습니다.안드로이드에서 손가락으로 캔버스에 두 지점 사이에 직선을 그리는 방법

package com.example.point; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PointF; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class DrawView extends View implements OnTouchListener { 
    private static final String TAG = "DrawView"; 

    List<Point> points = new ArrayList<Point>(); 
    List<Point> points1 = new ArrayList<Point>(); 
    List<Point> points2 = new ArrayList<Point>(); 
    Paint paint = new Paint(); 
PointF firstpoint=new PointF(100,100); 
PointF secondpoint=new PointF(200,200); 
Path path=new Path(); 
    public DrawView(Context context) { 
     super(context); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 

     this.setOnTouchListener(this); 

     paint.setColor(Color.BLACK); 

     paint.setAntiAlias(true); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 


     paint.setStrokeWidth(3); 
     canvas.drawPoint(100, 100, paint); 
     canvas.drawPoint(200, 200, paint); 
     canvas.drawPoint(200, 400, paint); 
     Point p=new Point(); 
     Point p1=new Point(); 
     //p1=points.get(1); 
     for(int i=points.size()-2;i<points.size();i++) 
     { 

      p=points.get(i); 
      //if(p1.x==100 && p1.y==100) 
     //canvas.drawLine(100, 100, p.x, p.y, paint); 
    // path.moveTo(100, 100); 
     //path.lineTo(200, 200); 
     //canvas.drawPath(path, paint); 
     } 




    } 

    public boolean onTouch(View view, MotionEvent event) { 

     /*if(event.getAction()==MotionEvent.ACTION_MOVE) 
     { 
     Point point1 = new Point();   
      point1.x = event.getX(); 
      point1.y = event.getY(); 
      points.add(point1); 
      invalidate(); 
      Log.d(TAG, "point: " + point1); 


     }*/ 
     //if(event.getX()==100 && event.getY()==100) 
     //{ 
      if(event.getAction()==MotionEvent.ACTION_MOVE) 
      { 
      Point point1 = new Point();   
      point1.x = event.getX(); 
      point1.y = event.getY(); 
      points.add(point1); 

      invalidate(); 
      Log.d(TAG, "point: " + point1); 
      //} 

     } 
     //return false; 
     return true; 



     /*switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      Point point = new Point();   
      point.x = event.getX(); 
      point.y = event.getY(); 
      points.add(point); 
      invalidate(); 
      Log.d(TAG, "point: " + point); 

      return true; 

     case MotionEvent.ACTION_MOVE: 
      Point point1 = new Point();   
      point1.x = event.getX(); 
      point1.y = event.getY(); 
      points1.add(point1); 
      invalidate(); 
      Log.d(TAG, "point: " + point1); 

      return true; 

     case MotionEvent.ACTION_UP: 

      Point point2 = new Point();   
      point2.x = event.getX(); 
      point2.y = event.getY(); 
      points2.add(point2); 
      invalidate(); 
      Log.d(TAG, "point: " + point2); 

      return true; 
     } 
    return false; 

     //  return true;*/ 
    } 
} 

class Point { 
    float x, y; 

    @Override 
    public String toString() { 
     return x + ", " + y; 
    } 
} 

손가락으로이 지점들 사이에 직선을 그 으려 고합니다. 내 손가락이 그 특정한 지점에서 멀리 떨어지면 나는 그려진 선보다 내 손가락을 뒤로 움직일 것입니다. 즉 이러한 특정 지점 사이에서만 그려지는 선.

답변

0

여기에 머리가 있습니다. 무언가를 시도하고 성공하지 못했을 때만 여기에 와서 물어 보는 것이 가장 좋습니다. 당신이 "당신은 무엇을 시도 했습니까?" 그런 것들.

질문에 관하여. http://developer.android.com/reference/android/graphics/Canvas.html은 좋은 출발점입니다. Android 설명서가 매우 유용합니다. 보시다시피 drawLine() 방법이 있습니다. 당신이 요구 한대로해야합니다. 행운을 빈다!

0
public class HelloGoogleMaps extends MapActivity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MapController mMapController; 
     MapView mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 
     mMapController = mapView.getController(); 
     mMapController.setZoom(18); 
     // Two points in Mexico about 1km apart 
     GeoPoint point1 = new GeoPoint(19240000,-99120000); 
     GeoPoint point2 = new GeoPoint(19241000,-99121000); 
     mMapController.setCenter(point2); 
     // Pass the geopoints to the overlay class 
     MapOverlay mapOvlay = new MapOverlay(point1, point2); 
     mapView.getOverlays().add(mapOvlay); 
    } 

    public class MapOverlay extends com.google.android.maps.Overlay { 

     private GeoPoint mGpt1; 
     private GeoPoint mGpt2; 

     protected MapOverlay(GeoPoint gp1, GeoPoint gp2) { 
     mGpt1 = gp1; 
     mGpt2 = gp2; 
     } 
     @Override 
     public boolean draw(Canvas canvas, MapView mapView, boolean shadow, 
      long when) { 
     super.draw(canvas, mapView, shadow); 
     Paint paint; 
     paint = new Paint(); 
     paint.setColor(Color.RED); 
     paint.setAntiAlias(true); 
     paint.setStyle(Style.STROKE); 
     paint.setStrokeWidth(2); 
     Point pt1 = new Point(); 
     Point pt2 = new Point(); 
     Projection projection = mapView.getProjection(); 
     projection.toPixels(mGpt1, pt1); 
     projection.toPixels(mGpt2, pt2); 
     canvas.drawLine(pt1.x, pt1.y, pt2.x, pt2.y, paint); 
     return true; 
     } 
    } 
    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

그 Runnnig 코드 내 Apps..All에서 최고의

0

은 캔버스 뷰 안에 앉아 있습니까?

public boolean onTouchEvent(MotionEvent event) 

손가락의 움직임을 감지하기 : 그렇다면, 여기 당신이

도움을 다음과 같은 방법을 봐 ... 점 사이의 선을 그리는 손가락의 움직임을 사용하는 방법에 대한 요구하고 가정 출발점이다. 방금 수행 한 동작 동작의 유형과 동작 동작 "색인"을 구별해야합니다. 그런 다음 동작이 움직이는 동작 (예 : 손가락 사이를 움직이는 점) 인 경우 drawPath 또는 drawLine으로 전화하여 회선을 그릴 수 있습니다.

관련 문제