如何使用android中的fingure在画布上绘制两点之间的直线
嗨,我是android开发的初学者。我正在开发一种类似油漆的应用程序。我已经在画布上画了一些点。现在我想通过fingure在这些点之间画一条线,我不知道怎么做。我没有使用谷歌地图如何使用android中的fingure在画布上绘制两点之间的直线,android,Android,嗨,我是android开发的初学者。我正在开发一种类似油漆的应用程序。我已经在画布上画了一些点。现在我想通过fingure在这些点之间画一条线,我不知道怎么做。我没有使用谷歌地图 package com.example.point; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.
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;
}
}
package com.example.point;
导入java.util.ArrayList;
导入java.util.List;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Path;
导入android.graphics.PointF;
导入android.util.Log;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
公共类DrawView扩展了视图实现OnTouchListener{
私有静态最终字符串标记=“DrawView”;
列表点=新的ArrayList();
列表点1=新的ArrayList();
列表点2=新的ArrayList();
油漆=新油漆();
点F第一点=新点F(100100);
点F第二点=新点F(200200);
路径路径=新路径();
公共绘图视图(上下文){
超级(上下文);
设置聚焦(真);
setFocusableInTouchMode(真);
this.setOnTouchListener(this);
油漆。设置颜色(颜色。黑色);
paint.setAntiAlias(真);
}
@凌驾
公共空白onDraw(画布){
油漆。设置行程宽度(3);
帆布。拉丝点(100,100,油漆);
帆布。拉丝点(200,200,油漆);
帆布。拉丝点(200400,油漆);
点p=新点();
点p1=新点();
//p1=点。获取(1);
对于(int i=points.size()-2;i这只是一个简单的例子,所以,通常最好是在你尝试了一些东西但没有成功之后才来这里询问。这样你就可以得到诸如“你尝试了什么…”之类的评论
关于你的问题。这是一个很好的开始。Android文档非常有用。
正如你所看到的,你有一个方法,它应该按照你的要求去做。
祝你好运
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;
}
}
它在我的应用程序中运行代码。最好的是,你的画布是否位于视图中?如果是,这里是一个起点,假设你正在询问如何使用手指移动在点之间画线
请查阅以下方法以获取帮助:
public boolean onTouchEvent(MotionEvent event)
检测手指运动。您需要区分刚刚发生的运动动作类型和运动动作“食指”。然后,如果该运动是一个运动动作(例如手指在点之间移动),则您可以调用或绘制线条