当前位置:首页 » 安卓系统 » android绘制轨迹

android绘制轨迹

发布时间: 2023-08-26 12:04:47

Ⅰ android 中如何画一条动态的画一条直线.(即从A到慢慢运动到B点的轨迹,走过后轨迹是一条线)

首先找到这条直线的所有点,然后开启一个线程循环获取点,用Handle发送消息去画线
@Override
public void run() {
try {
for(int i = 0 ; i < myPointList.size(); i++)
{
MyPoint myPoint = myPointList1.get(i);
Message message = Message.obtain();
message.what = 2;
message.obj = myPoint;
mHandler.sendMessage(message);
Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}

Ⅱ android如何画一条动态直线

android画一条动态直线实现思路:

一个主view类(一个自定义view),在主view类中定义了统一的paint、bitmap、canvas,以及子类中需要用到的3个点downPoint,movePoint,upPoint。

其他子类(画直线的view、画矩形的view····)都是继承这个主view类。

在每次选择形状的时候:

1、实例化一个view类;

2、将view类加入到当前activity;

画每一种形状都是在自己的view上进行,新加进来的view覆盖前面的view。

每个子类中都有方法onTouchEvent()执行自己的操作;

具体实现代码;

public boolean onTouchEvent(MotionEventevent) {

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

caseMotionEvent.ACTION_MOVE:

caseMotionEvent.ACTION_UP:

}

return true;

}

安卓手机怎么在地图上显示行走痕迹

需要借助网络地图软件显示行走轨迹。
1、进入网络地图界面点击左上角个人头像。
2、进入个人界面之后,在下方找到足迹按钮,并点击进入。
3、进入界面后就显示出一个月之内的行为轨迹了。

Ⅳ Android中Path类的lineTo方法和quadTo方法画线的区别

当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的lineTo和quadTo方法实现的绘制线路形式也是不一样的,下面就以代码的实现来直观的探究这两个方法的功能实现区别;
1. Path--->quadTo(float x1, float y1, float x2, float y2):
该方法的实现是当我们不仅仅是画一条线甚至是画弧线时会形成平滑的曲线,该曲线又称为"贝塞尔曲线"(Bezier curve),其中,x1,y1为控制点的坐标值,x2,y2为终点的坐标值;
贝塞尔曲线的形成,就比如我们把一条橡皮筋拉直,橡皮筋的头尾部对应起点和终点,然后从拉直的橡皮筋中选择任意一点(除头尾对应的点外)扯动橡皮筋形成的弯曲形状,而那个扯动橡皮筋的点就是控制点;
下就面以一个Demo来结合理解quadTo函数的应用,代码如下:
1).自定义View:

[java] view plain
package com.feixun.hu.pt;

import android.content.Context;
import android.gesture.GestureStroke;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class DrawingWithBezier extends View
{
private float mX;
private float mY;

private final Paint mGesturePaint = new Paint();
private final Path mPath = new Path();

public DrawingWithBezier(Context context)
{
super(context);
mGesturePaint.setAntiAlias(true);
mGesturePaint.setStyle(Style.STROKE);
mGesturePaint.setStrokeWidth(5);
mGesturePaint.setColor(Color.WHITE);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
// TODO Auto-generated method stub
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
touchDown(event);
break;
case MotionEvent.ACTION_MOVE:
touchMove(event);
}
//更新绘制
invalidate();
return true;
}

@Override
protected void onDraw(Canvas canvas)
{
// TODO Auto-generated method stub
super.onDraw(canvas);
//通过画布绘制多点形成的图形
canvas.drawPath(mPath, mGesturePaint);
}

//手指点下屏幕时调用
private void touchDown(MotionEvent event)
{

//mPath.rewind();
//重置绘制路线,即隐藏之前绘制的轨迹
mPath.reset();
float x = event.getX();
float y = event.getY();

mX = x;
mY = y;
//mPath绘制的绘制起点
mPath.moveTo(x, y);
}

//手指在屏幕上滑动时调用
private void touchMove(MotionEvent event)
{
final float x = event.getX();
final float y = event.getY();

final float previousX = mX;
final float previousY = mY;

final float dx = Math.abs(x - previousX);
final float dy = Math.abs(y - previousY);

//两点之间的距离大于等于3时,生成贝塞尔绘制曲线
if (dx >= 3 || dy >= 3)
{
//设置贝塞尔曲线的操作点为起点和终点的一半
float cX = (x + previousX) / 2;
float cY = (y + previousY) / 2;

//二次贝塞尔,实现平滑曲线;previousX, previousY为操作点,cX, cY为终点
mPath.quadTo(previousX, previousY, cX, cY);

//第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
mX = x;
mY = y;
}
}

}

2).MainActivity:

[java] view plain
package com.feixun.hu.pt;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(new MySurfaceView(this));
setContentView(new DrawingWithBezier(this));
//setContentView(new DrawingWithoutBezier(this));
}
}

该Demo实现用户在手机屏幕上滑动手指时,可根据手指滑动的位置绘制出相应的线条,类似输入法手势的绘制,所以代码中的画笔Paint命名为mGesturePaint;
比如,我们在屏幕上绘制S这个图案,则形成的图案如下:

2. Path--->lineTo(float x, float y) :

该方法实现的仅仅是两点连成一线的绘制线路,这样,当我们用这个方法绘制曲线时,缺陷就出来了;下面的例子,同样还是和上面的Demo差不多,只不过Path调用的是lineTo方法,如下:
1). 自定义View:

[java] view plain
package com.feixun.hu.pt;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Bitmap.Config;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class DrawingWithoutBezier extends View
{
private float mX;
private float mY;

private final Paint mGesturePaint = new Paint();
private final Path mPath = new Path();

public DrawingWithoutBezier(Context context)
{
super(context);
mGesturePaint.setAntiAlias(true);
mGesturePaint.setStyle(Style.STROKE);
mGesturePaint.setStrokeWidth(5);
mGesturePaint.setColor(Color.WHITE);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
// TODO Auto-generated method stub
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
touchDown(event);
break;
case MotionEvent.ACTION_MOVE:
touchMove(event);
}
//更新绘制
invalidate();
return true;
}

@Override
protected void onDraw(Canvas canvas)
{
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawPath(mPath, mGesturePaint);
}

//手指点下屏幕时调用
private void touchDown(MotionEvent event)
{

//mPath.rewind();
mPath.reset();
float x = event.getX();
float y = event.getY();

mX = x;
mY = y;

//mPath绘制的绘制起点
mPath.moveTo(x, y);
}

//手指在屏幕上滑动时调用
private void touchMove(MotionEvent event)
{
final float x = event.getX();
final float y = event.getY();

final float previousX = mX;
final float previousY = mY;

final float dx = Math.abs(x - previousX);
final float dy = Math.abs(y - previousY);

//两点之间的距离大于等于3时,连接连接两点形成直线
if (dx >= 3 || dy >= 3)
{
//两点连成直线
mPath.lineTo(x, y);

//第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
mX = x;
mY = y;
}
}

}

2).MainActivity:

[java] view plain
package com.feixun.hu.pt;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(new MySurfaceView(this));
//setContentView(new DrawingWithBezier(this));
setContentView(new DrawingWithoutBezier(this));
}
}

同样地,用该例子绘制S形图案,形成的图案如下:

结论 :对比前面quadTo方法绘制的S,lineTo绘制的S在弯曲部分很明显的不能形成平滑的弯曲,会出现明显的两点形成一线的突痕。可能图片看的不是清楚,自行运行这个Demo,然后在屏幕上绘制弯曲曲线或者圆,对比查看他们的形状区别就一目了然;
3. SurfaceView绘制贝塞尔曲线:
上面的绘制图案方式都是基于View来绘制,当然,我们也可以结合SurfaceView和Rect来实现绘制贝塞尔曲线,这样绘制的效果相对会比较好,而且效率也相对较高,毕竟相对SurfaceView而言,在动态绘制点线方面较之View更加出色;

Ⅳ Android使用高德API实现轨迹追踪(作业要自己写哦)

每间隔10秒,同时距离移动大于1米的情况下,记录一次位置信息,在地图上绘制60秒的行动轨迹。

高德API的引用可见我上一篇博客: https://www.jianshu.com/p/4b773727e42c
在上一篇博客已经实现了地图的显示,因此需要实现的功能如下:
1.记录位置
2.在地图上绘制轨迹

在AndroidManifest.xml的application标签中声明service组件,每个app拥有自己单独的定位service。声明如下:

主要是定位+回调函数绘制路线。

(这里不加也可以,但是有可能会出现报错但还能运行或者是闪退的情况)

不知道是不是定位不精确的原因,短距离步行显示的差距有点大,也有可能是第一次定位和第二次定位会出现偏差导致了第一个线段的不准确。

远距离的轨迹跟踪还是比较准确的。

Ⅵ Android如何做到随着ImageView的移动画出移动轨迹

运行效果是这样的(文字说明):
首次进入程序,手指点击屏幕上的任意位置,图片会随之移动。
布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FrameLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#f0f0f0" >
<com.sgw.move.MoveImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon" >
</com.sgw.move.MoveImageView>
</FrameLayout>

实现代码
public class MoveImageView extends ImageView {

public MoveImageView(Context context) {
super(context);
}
public MoveImageView(Context context, AttributeSet attrs) {
super(context, attrs, 0);
}
public MoveImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setLocation(int x, int y) {
this.setFrame(x, y - this.getHeight(), x + this.getWidth(), y);
}
// 移动
public boolean autoMouse(MotionEvent event) {
boolean rb = false;
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
this.setLocation((int) event.getX(), (int) event.getY());
rb = true;
break;
}
return rb;
}
}
public class TestImageViewMove extends Activity {
private MoveImageView moveImageView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
moveImageView = (MoveImageView) this.findViewById(R.id.ImageView01);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
moveImageView.autoMouse(event);
return false;
}
}

以上内容给大家介绍了基于Android实现随手指移动的ImageView的相关知识,希望本文分享对大家有所帮助。

Ⅶ 安卓版高德地图如何实时记录我的轨迹

高德地图目前将轨迹汽车驾驶轨迹记录功能取消,只能查看您的驾驶记录,如果您是步行或者骑行,则可以在开始之前在【路线】中创建新轨迹,结束之后就会保留你的轨迹。具体步骤如下:

1、驾驶时,如果您使用了导航功能,在【工具箱】-【驾驶成就】里,有您的行驶记录;

2、如果是步行的话,您点击【路线】-【步行】-【创建新轨迹】-【开始步行】,结束之后,会保留你的步行轨迹;

3、如果是骑行的话,您点击【路线】-【骑行】-【创建新轨迹】-【开始骑行】,结束之后,会保留你的骑行轨迹;

4、如果您需要查看汽车驾驶轨迹记录功能,目前这个功能已经在新版本的高德地图上面被取消。

Ⅷ Android手机安装哪种软件可是记录运动轨迹

具体如下:

  • 1.第一步,打开华为手机上的运动健康。

Ⅸ 有哪个安卓软件可以准确记录我们行动的轨迹

楼主有一款益动运动记录的软件挺不错的

可以用手机的GPS功能记录运动轨迹,还有运动时间等等,功能还是很强大的

这款软件可以在应用宝里下载到

先在电脑上下载一个应用宝,然后打开手机的usb调试

把手机连接到电脑上待手机连接成功之后

在应用宝的搜索框搜索这款软件就可以了

搜到之后直接点击下载它就自动安装到你手机里了,特别方便

希望可以帮到你

热点内容
怎么下载安卓驱动器 发布:2025-03-08 21:52:15 浏览:178
淘宝搭建服务器可以退款吗 发布:2025-03-08 21:48:37 浏览:798
1628脚本安装失败 发布:2025-03-08 21:47:51 浏览:415
c加加编译价目表 发布:2025-03-08 21:45:47 浏览:1000
甘肃金昌服务器地址云主机 发布:2025-03-08 21:45:30 浏览:525
ftp上传工具的使用 发布:2025-03-08 21:40:20 浏览:258
苹果和安卓哪个手机耐用 发布:2025-03-08 21:39:40 浏览:434
家用视频服务器搭建 发布:2025-03-08 21:31:06 浏览:523
手机为什么缓存失败 发布:2025-03-08 21:31:00 浏览:503
我的世界如何做服务器的特殊商店 发布:2025-03-08 21:30:57 浏览:574