草庐IT

android - 绘制虚线 (....) 路径而不是直线 (________)

coder 2023-12-09 原文

现在下面是我在 map 中的地理点之间绘制路径的代码。这工作得很好。我想要实现的不是画一条线,而是像在 iPhone 中那样用点 (.) 显示这条路径。我希望它像这样 gp1.........gp2 而不是像 gp1 那样画一条直线_____/强>_gp2.

我已经尝试了几乎所有的方法来做到这一点,但仍然没有成功,任何人都可以帮助我解决这个问题吗?

private void drawPath(List geoPoints, int color) {
    List overlays = objMapView.getOverlays();
    int loopcount = geoPoints.size() - 1;
    for (int i = 0; i < loopcount; i++) {
        GeoPoint p1 = (GeoPoint) geoPoints.get(i);
        GeoPoint p2 = (GeoPoint) geoPoints.get(i + 1);
        MyPathOverLay p = null;
        /**** Marking the start and end of the trailpath ****/
        if (i == 0) {
            Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),R.drawable.greenflag);
            p = new MyPathOverLay(p1, p2, 0xFFFF0000, true, false, bmp);
        } else if (i == loopcount - 1) {
            Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),R.drawable.redflag);
            p = new MyPathOverLay(p1, p2, 0xFFFF0000, false, true, bmp);
        } else {
            p = new MyPathOverLay(p1, p2, 0xFFFF0000, false, false, null);
        }
        overlays.add(p);
    }
}



public class MyPathOverLay extends Overlay {

private GeoPoint gp1;
private GeoPoint gp2;
private int color;
Boolean  isFirstPOI;
Boolean isLastPOI;
AudioMap audioMap;
Bitmap bmp;

public MyPathOverLay(GeoPoint gp1, GeoPoint gp2, int color,Boolean first, Boolean last,Bitmap bitMap) {
    this.gp1 = gp1;
    this.gp2 = gp2;
    this.color = color;
    this.isFirstPOI= first;
    this.isLastPOI = last;
    this.bmp = bitMap;
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    Projection projection = mapView.getProjection();
    Paint paint = new Paint();
    Point point = new Point();
    projection.toPixels(gp1, point);
    paint.setColor(color);
    Point point2 = new Point();
    projection.toPixels(gp2, point2);
    paint.setStrokeWidth(5);
    paint.setAlpha(120);
    canvas.drawLine(point.x, point.y, point2.x, point2.y, paint);
  //---translate the GeoPoint to screen pixels---
    Point screenPts = new Point();
    mapView.getProjection().toPixels(gp1, screenPts);
    //---translate the GeoPoint to screen pixels---
    Point screenPts1 = new Point();
    mapView.getProjection().toPixels(gp2, screenPts1);
    if(isFirstPOI == true){
            canvas.drawBitmap(bmp,screenPts.x-20,screenPts.y-40, null);  
    }
    else if(isLastPOI == true) {
            canvas.drawBitmap(bmp,screenPts1.x-20,screenPts1.y-35, null);  
   }
    super.draw(canvas, mapView, shadow);
}

最佳答案

感谢这个人,我引用了这个例子,它对我有用。

How do I make a dotted/dashed line in Android?

只需添加这两行,

    paint.setPathEffect(new DashPathEffect(new float[] {10,10}, 5));
    canvas.drawLine(point.x, point.y, point2.x, point2.y, paint);

设置后,

    paint.setAlpha(120); 

@弗兰肯斯坦,谢谢

关于android - 绘制虚线 (....) 路径而不是直线 (________),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10185445/

有关android - 绘制虚线 (....) 路径而不是直线 (________)的更多相关文章

  1. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  2. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  3. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

    我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

  6. ruby - 在 Ruby 中,垂直线是什么? - 2

    1.upto(9){|x|printx}为什么这行不通?{printx|x}}y呢? 最佳答案 它用于传递给您的block的参数。即在您的示例中,upto将使用1到9中的每个数字调用您的block,当前值可作为x获得。block参数可以有任何名称,就像方法参数一样。例如1.upto(9){|num|putsnum是有效的。就像一个方法的参数一样,一个block也可以有多个参数。例如hash.each_pair{|key,value|puts"#{key}is#{value}"} 关于ru

  7. ruby-on-rails - 只有当不是 nil 时才执行映射? - 2

    如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e

  8. ruby-on-rails - 如何播种图像的路径? - 2

    Organization和Image具有一对一的关系。Image有一个名为filename的列,它存储文件的路径。我在Assets管道中包含这样一个文件:app/assets/other/image.jpg。播种时如何包含此文件的路径?我已经在我的种子文件中尝试过:@organization=...@organization.image.create!(filename:File.open('app/assets/other/image.jpg'))#Ialsotried:#@organization.image.create!(filename:'app/assets/other/i

  9. ruby-on-rails - Rails 格式验证——字母数字,但不是纯数字 - 2

    什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta

  10. ruby - 强制浏览器下载文件而不是打开文件 - 2

    我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.

随机推荐