腾讯地图SDK Android版开发 11 覆盖物示例 4 线

news2024/11/15 21:39:14

腾讯地图SDK Android版开发 11 覆盖物示例 4 线

  • 前言
  • 线的属性介绍
    • ColorType 和 LineType
      • ColorType
      • LineType
    • 与颜色有关的属性
      • 填充色和线宽
      • 描边颜色和描边的宽度
      • 分段颜色
      • 渐变色
      • 擦除颜色
    • 与纹理相关属性
      • 内置纹理
      • 自定义颜色纹理
      • 线上叠加纹理
    • 虚线
  • 界面布局
  • MapPolyline类
    • 常量
    • 成员变量
    • 初始值
    • 创建覆盖物
    • 移除覆盖物
    • 设置属性
    • 加载地图和释放地图
  • MapPolylineActivity类
    • 控件响应事件
  • 运行效果图

前言

文本通过创建多个不同线宽的折线,介绍Polyline的使用方法。

线的属性包括是否可点击、透明度、描边属性、是否虚线、填充属性和擦除颜色。

  • 填充属性包括分段颜色内置纹理颜色纹理箭头纹理渐变色。只能选一或不选。

为了直观显示线的属性,仅使用了CheckBox控件,多种属性只能选一通过代码实现。

说明:官方指南中还介绍了线的更多用法,如动态路名、折线动画、线的动态更新

线的属性介绍

线是由一组经纬度点按照一定的顺序连接而成,在地图上绘制线由 Polyline 类定义实现。通常用来表示一段路、轨迹等线型场景。

添加折线的同时可以设置线的颜色、宽度等属性。

ColorType 和 LineType

ColorType

  • 枚举 PolylineOptions.ColorType 定义了通过纹理和颜色两种填充线的方式。
枚举常量说明
LINE_COLOR_NONE未设置颜色类型 (默认值)
LINE_COLOR_TEXTURE纹理图片里的颜色索引
LINE_COLOR_ARGB纯色线 32bit ARGB颜色

LineType

  • 类PolylineOptions.LineType 定义了线的绘制类型。
常量说明
LINE_TYPE_MULTICOLORLINE彩虹蚯蚓**(默认值)**0
LINE_TYPE_IMAGEINARYLINE虚线1
LINE_TYPE_DOTTEDLINE2

与颜色有关的属性

填充色和线宽

  • color(int i) 设置线的颜色
  • width(float width) 设置线宽度

描边颜色和描边的宽度

  • borderColor 设置ARGB线的描边颜色。

  • borderWidth 设置ARGB线描边的宽度。

    • 设置描边颜色的宽度后,填充的部分宽度为 width - 2 * borderWidth
  • borderColors 设置描边分段颜色。

    • 颜色数量应该与 colors(int[]colors, int[]indexes)接口中的colors的长度保持一致。

分段颜色

// 设置分段线的顶点索引,这个索引值的数量必须和下面的颜色列表数量相同
int[] indexes = {0,1,2,3,4};
// 设置每段索引之间的颜色,这个颜色同样支持纹理颜色,即 PolylineOptions.Colors 中定义的 [0, 10] 值
int[] colors = {0xff00ff00, // 线上点 [0, 1] 之间为绿色
                0xffffff00, // 线上点 [1, 2] 之间为黄色
                0xffff0000, // 线上点 [2, 3] 之间为红色
                0xffffff00, // 线上点 [3, 4] 之间为黄色
                0xff00ff00  // 线上点 [4, 最后一个点] 之间为绿色
};
polylineOptions.width(15f);
//设置彩虹线的颜色
polylineOptions.colors(colors, indexes);

渐变色

注意:设置渐变开关 只有线类型是PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE 且 PolylineOptions.isRoad() 为 true才生效

(备注:isRoad默认为true)

// 设置线的类型
polylineOptions.lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE);
// 渐变色折线
polylineOptions.gradient(true);
polylineOptions.colors(colors, indexes);

擦除颜色

支持线从 Polyline 中索引为 0 的坐标点开始擦除到用户指定的坐标点。以上面的线为例,从第一段中擦除一部分:

Polyline polyline = tencentMap.addPolyline(polylineOptions);
// 必须设置 `true`,默认为 `false`
polyline.setEraseable(true);
// 其中第一个参数表示要擦除到的坐标索引 `index`
// 第二个参数表示从 [`index -1`, `index`] 之间的坐标
// 如果这个坐标不在擦除的索引范围内,会一直擦除到 `index`
polyline.eraseTo(1, new LatLng(39.983919,116.305722));

与纹理相关属性

通常用用 ARGB 颜色值直接设置线的颜色,这能满足大部分场景,但对于希望有阴影效果的线就无法满足了。

地图 SDK 支持用纹理填充线来实现阴影等效果,这个纹理可以理解为线的截面纹理,地图把这个截面的纹理沿线绘制的方向填充到整条线。

内置纹理

地图 SDK 内置一份纹理填充颜色,用户只需要通过 PolylineOptions.color(int i) 接口设置 PolylineOptions.Colors 中定义的 [0, 10] 号对应的颜色就能展示对应的效果。

  • 示例
// 纹理颜色
polylineOptions.color(PolylineOptions.Colors.GRAYBLUE)
  • PolylineOptions.Colors 类
常量说明
GREY灰色0
LIGHT_BLUE淡蓝1
RED红色2
YELLOW黄色3
GREEN绿色4
MID_BLUE中蓝5
DARK_BLUE深蓝6
TRANSPARENT透明色7
GRAYBLUE灰蓝8
LIVER_RED猪肝红9
DASHED虚线(绘制步行时使用到)33
WHITE_BLUE19
LAST_BLUE最后一条蓝色的线20

自定义颜色纹理

  • 使用自定义纹理填充。
// 设置自定义纹理,纹理在工程的 assets 目录
polylineOptions.colorTexture(BitmapDescriptorFactory.fromAsset("color_texture.png"))
// 使用纹理图片的第三行像素填充线的每个像素截面
polylineOptions.color(2);

线上叠加纹理

  • 示例:线上绘制箭头
// 折线的颜色为绿色
polylineOptions.color(0xff00ff00);
// 折线宽度为25像素
polylineOptions.width(25);
// 必须打开这个开关,允许在线上绘制纹理
polylineOptions.arrow(true);
// 支持设置纹理的间距
polylineOptions.arrowSpacing(30);
// 设置纹理图片
polylineOptions.arrowTexture(BitmapDescriptorFactory.fromAsset("color_arrow_texture.png"));
  • PolylineOptions 类
类型方法说明
PolylineOptionsarrow(boolean flag)导航用接口,开发都不要用
PolylineOptionsarrowSpacing(int arrowSpacing)设置方向箭头的间距,单位(px),默认是100px
PolylineOptionsarrowTexture(BitmapDescriptor arrowTexture)设置方向箭头的自定义纹理

虚线

  • pattern(List< Integer > pattern)设置ARGB虚线的样式
  • 虚线属性pattern的元素数量必须是偶数个,每对元素分别表示虚线中实线区域的长度,以及空白区域的长度(单位px)。
// 设置虚线模式
List<Integer> pattern = new ArrayList<>();
pattern.add(35);
pattern.add(20);
polylineOptions.pattern(list);

界面布局

在这里插入图片描述

  • 布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapPolylineActivity">

    <com.tencent.tencentmap.mapsdk.maps.TextureMapView
        android:id="@+id/mapview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@id/bottomView"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.appcompat.widget.LinearLayoutCompat
        android:id="@+id/bottomView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/mapview">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/background_dark"
            android:gravity="center_horizontal"
            android:orientation="horizontal">

            <CheckBox
                android:id="@+id/clickable"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="true"
                android:onClick="setMarkerFlag"
                android:text="点击"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/alpha"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="setMarkerFlag"
                android:text="透明"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/colors"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.3"
                android:onClick="setMarkerFlag"
                android:text="分段颜色"
                android:textColor="@color/yellow_800"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/defaultTexture"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.3"
                android:onClick="setMarkerFlag"
                android:text="内置纹理"
                android:textColor="@color/yellow_800"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/colorTextures"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.3"
                android:onClick="setMarkerFlag"
                android:text="颜色纹理"
                android:textColor="@color/yellow_800"
                android:textStyle="bold" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center"
            android:background="@android:color/background_dark"
            android:orientation="horizontal">

            <CheckBox
                android:id="@+id/border"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="setMarkerFlag"
                android:text="描边"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/dottedLine"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="setMarkerFlag"
                android:text="虚线"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/arrowTexture"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.3"
                android:onClick="setMarkerFlag"
                android:text="箭头纹理"
                android:textColor="@color/yellow_800"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/gradient"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.3"
                android:onClick="setMarkerFlag"
                android:text="渐变色"
                android:textColor="@color/yellow_800"
                android:textStyle="bold" />

            <CheckBox
                android:id="@+id/eraseColor"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.3"
                android:onClick="setMarkerFlag"
                android:text="擦除颜色"
                android:textColor="@color/white"
                android:textStyle="bold" />

        </LinearLayout>
    </androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>

MapPolyline类

以下为MapPolyline类部分代码。

常量

public static final String CLICKABLE = "clickable"; // 点击
public static final String ALPHA = "alpha"; // 透明
public static final String BORDER = "border"; // 描边
public static final String DOTTED_LINE = "DottedLine"; // 虚线
public static final String COLORS = "Colors"; // 分段颜色
public static final String DEFAULT_TEXTURES = "DefaultTextures"; // 内置纹理
public static final String COLOR_TEXTURES = "ColorTextures"; // 分段纹理
public static final String ARROW_TEXTURES = "ArrowTextures"; // 箭头纹理
public static final String GRADIENT = "Gradient"; // 渐变色
public static final String ERASE_COLOR = "EraseColor"; // 擦除颜色
  • 渐变色
final static int COLOR_RED = 0xAAD50000;
final static int COLOR_YELLOW = 0xAAF57F17;
final static int COLOR_BLUE = 0xAA0D47A1;
final static int COLOR_GREEN = 0xAA33691E;
final static int COLOR_GRAY = 0xAA999999;
  • 折线线宽:多个折线的宽度依次为5,10, 15, ……
final static int LINE_WIDTH_MIN = 5;
final static int LINE_WIDTH_STEP = 5;
  • 描边宽度和颜色
final static int LINE_BORDER_WIDTH = 2;
final static int LINE_BORDER_COLOR = 0xFFFFFF00; // 描边颜色 黄色
  • 擦除颜色
final static int LINE_ERASE_COLOR = COLOR_GRAY; // 擦除颜色

成员变量

// 覆盖物列表
List<Removable> overlays = new ArrayList<>();
// 选中的状态
List<String> selectedFlags = new ArrayList<>();

List<List<LatLng>> lines = new ArrayList<>(); // 多个折线
BitmapDescriptor colorBitmap;
BitmapDescriptor arrowBitmap;
int[] colorValues; // 渐变色
int[] borderValues; // 描边渐变色

初始值

  • 默认选中选项
selectedFlags.add(CLICKABLE);
  • 多个折线
double latSpan = 0.05;
for (int i = 0; i < 5; ++i) {
    List<LatLng> points = new ArrayList<>();
    points.add(new LatLng(39.865 + latSpan * i, 116.254));
    points.add(new LatLng(39.865 + latSpan * i, 116.304));
    points.add(new LatLng(39.825 + latSpan * i, 116.354));
    points.add(new LatLng(39.855 + latSpan * i, 116.394));
    points.add(new LatLng(39.805 + latSpan * i, 116.454));
    points.add(new LatLng(39.865 + latSpan * i, 116.504));
    points.add(new LatLng(39.805 + latSpan * i, 116.544));
    lines.add(points);
}
  • 纹理和颜色(纹理图来自官方Demo)
colorBitmap = BitmapDescriptorFactory.fromAsset("color_texture.png");
arrowBitmap = BitmapDescriptorFactory.fromAsset("color_arrow_texture.png");

colorValues = new int[]{COLOR_RED, COLOR_YELLOW, COLOR_BLUE, COLOR_GREEN};
borderValues = new int[]{COLOR_GREEN, COLOR_BLUE, COLOR_YELLOW, COLOR_RED};
  • 点击事件
initEvent();
private void initEvent() {
    map.setOnPolylineClickListener(new TencentMap.OnPolylineClickListener() {
        @Override
        public void onPolylineClick(Polyline polyline, LatLng point) {
            showToast("click polyline");
        }
    });
}

创建覆盖物

  • 创建大地曲线或创建多个折线
public void addOverlays() {
    // 创建多个折线
    int width = LINE_WIDTH_MIN;
    for (List<LatLng> points : lines) {
        PolylineOptions polylineOptions = new PolylineOptions()
                // 设置线宽度
                .width(width)
                // 设置线的颜色
                .color(COLOR_RED)
                // 设置路线是否显示半圆端点
                .lineCap(true)
                .addAll(points);

        setOption(polylineOptions, selectedFlags);

        // 在地图上绘制折线
        Polyline polyline = map.addPolyline(polylineOptions);
        if (selectedFlags.contains(ERASE_COLOR)) {
            // 必须设置 `false`,默认为 `true`
            // polyline.setEraseable(false);
            // 其中第一个参数表示要擦除到的坐标索引 index
            // 第二个参数表示从 [index -1, index] 之间的坐标
            // 如果这个坐标不在擦除的索引范围内,会一直擦除到 index
            final int index = 2;
            polyline.eraseTo(index, points.get(index - 1));
        }
        overlays.add(polyline);

        width += LINE_WIDTH_STEP;
    }
}
  • 设置折线属性
private void setOption(PolylineOptions option, List<String> flags) {
    if (flags.contains(CLICKABLE))
        option.clickable(true);
    else
        option.clickable(false);

    if (flags.contains(ALPHA)) {
        final float alpha = 0.5f;
        // 设置透明度
        option.alpha(alpha);
    }

    if (flags.contains(BORDER)) {
        if (flags.contains(COLORS) || flags.contains(GRADIENT)) {
            // 分段描边
            option.borderColors(borderValues);
        } else {
            // 设置线ARGB的描边颜色
            // 当线是纯色线的时候,设置border的颜色可用此接口
            option.borderColor(LINE_BORDER_COLOR);
        }
        // 设置ARGB线 描边的宽度
        // 描边颜色的宽度,不过填充的部分宽度为 width - 2 * borderWidth
        option.borderWidth(LINE_BORDER_WIDTH);
    }

    if (flags.contains(DOTTED_LINE)) {
        // 设置虚线模式
        List<Integer> pattern = new ArrayList<>();
        pattern.add(35);
        pattern.add(20);
        option.pattern(pattern);
        // 设置路线是否显示半圆端点
        option.lineCap(true);
    }

    if (flags.contains(COLORS)) {
        int[] indexes = new int[colorValues.length];
        for (int i = 0; i < indexes.length; ++i)
            indexes[i] = i;

        option.lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE);
        option.colors(colorValues, indexes);
    }

    if (flags.contains(DEFAULT_TEXTURES)) {
        option.color(PolylineOptions.Colors.GRAYBLUE);
    }

    if (flags.contains(COLOR_TEXTURES)) {
        // 设置图片作为线的填充纹理
        // 注意:
        // 1、当调用此接口,且LineType不为 LINE_TYPE_DOTTEDLINE 时,
        //  color和colors接口指定的值代表用此接口设置纹理的第几像素行,以绘制纹理线。
        // 2、当调用此接口,且LineType设置为 LINE_TYPE_DOTTEDLINE 时,
        //  绘制线时会连续绘制此接口设置的纹理。
        option.colorTexture(colorBitmap);

        // 设置线的颜色
        // final int color = 1;
        // option.color(color);
        // 设置线的分段颜色 红,黄,蓝,绿,浅蓝
        final int[] colors = new int[]{2, 3, 1, 4, 8};
        final int[] indexes = new int[]{0, 1, 2, 4, 5};
        option.colors(colors, indexes);
    }

    if (flags.contains(ARROW_TEXTURES)) {
        // 必须打开这个开关,允许在线上绘制纹理
        option.arrow(true);
        // 支持设置纹理的间距
        option.arrowSpacing(30);
        // 设置纹理图片
        option.arrowTexture(arrowBitmap);
    }

    if (flags.contains(GRADIENT)) {
        int[] indexes = new int[colorValues.length];
        for (int i = 0; i < indexes.length; ++i)
            indexes[i] = i;

        // 渐变色折线
        option.gradient(true);
        // 设置线的类型
        option.lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE);
        option.colors(colorValues, indexes);
    }

    if (flags.contains(ERASE_COLOR)) {
        option.eraseColor(LINE_ERASE_COLOR);
    }
}

移除覆盖物

public void removeOverlay() {
    // 清除地图上所有的标注类(Marker、Polyline、Polygon,TileOverlay除外)
    // map.clearAllOverlays();

    // 从地图移除覆盖物
    for (Removable overlay : overlays) {
        if (!overlay.isRemoved())
            overlay.remove();
    }
    overlays.clear();
}

设置属性

public void setFlags(List<String> flags) {
    selectedFlags.clear();
    selectedFlags.addAll(flags);

    removeOverlay();
    addOverlays();
}

加载地图和释放地图

public void onMapLoaded() {
    addOverlays();
}

public void onMapDestroy() {
    removeOverlay();
}

MapPolylineActivity类

以下是MapPolylineActivity类部分代码

控件响应事件

说明:为了直观显示线的属性,仅使用了CheckBox控件,多种属性只能选一通过代码实现。

public void setMarkerFlag(View view) {
    List<Integer> group = Arrays.asList(
            R.id.colors,
            R.id.defaultTexture,
            R.id.colorTextures,
            R.id.arrowTexture,
            R.id.gradient);

    boolean checked = ((CheckBox) view).isChecked();
    int id = view.getId();
    if (checked) {
        if (group.contains(id)) {
            for (int checkBoxId : group) {
                if (checkBoxId != id) {
                    ((CheckBox) findViewById(checkBoxId)).setChecked(false);
                }
            }
        }
    }

    update();
}
private void update() {
    final int[] ids = {
            R.id.clickable,
            R.id.alpha,
            R.id.border,
            R.id.dottedLine,
            R.id.colors,
            R.id.defaultTexture,
            R.id.colorTextures,
            R.id.arrowTexture,
            R.id.gradient,
            R.id.eraseColor,
    };
    final String[] options = {
            MapPolyline.CLICKABLE,
            MapPolyline.ALPHA,
            MapPolyline.BORDER,
            MapPolyline.DOTTED_LINE,
            MapPolyline.COLORS,
            MapPolyline.DEFAULT_TEXTURES,
            MapPolyline.COLOR_TEXTURES,
            MapPolyline.ARROW_TEXTURES,
            MapPolyline.GRADIENT,
            MapPolyline.ERASE_COLOR,
    };
    List<String> flags = new ArrayList<>();
    for (int i = 0; i < ids.length; ++i) {
        CheckBox checkBox = findViewById(ids[i]);
        if (checkBox.isChecked())
            flags.add(options[i]);
    }
    mapPolyline.setFlags(flags);
}

运行效果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【系统架构设计】基于中间件的开发

【系统架构设计】基于中间件的开发 中间件技术J2EE.NET企业应用集成中间件技术 中间件属于可复用软件的范畴,处于操作系统、网络和数据库之上,应用软件的下层。 J2EE J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范。这组应用编程接口确定了 Web 应用…

民间故事推广系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;民族文化管理&#xff0c;节日类型管理&#xff0c;传统节日管理&#xff0c;故事类型管理&#xff0c;民间故事管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首…

基于SpringBoot+Vue+MySQL的IT技术交流和分享平台

系统展示 用户前台界面 管理员后台界面 系统背景 在数字化转型的浪潮中&#xff0c;构建一个基于SpringBoot、Vue.js与MySQL的IT技术交流与分享平台显得尤为重要。该平台旨在汇聚广大IT从业者、开发者及爱好者&#xff0c;提供一个高效、便捷的线上空间&#xff0c;用于分享最新…

7.类的大小

对于C的类而言&#xff0c;类的大小似乎并非完全由用户控制&#xff0c;我们看看如下的代码。 class X {}; class Y : public virtual X{}; class Z : public virtual X{}; class A : public Y, public Z{}; 上述的X,Y,Z,A中没有任何一个class内含有明显的数据&#xff0c;其…

基本开关稳压器(升压结构+降压结构+逆变结构)

2024-9-14&#xff0c;星期六&#xff0c;7:25&#xff0c;天气&#xff1a;多云&#xff0c;心情&#xff1a;晴。明天就就要迎来三天小长假啦&#xff0c;提前祝大家假期快乐&#xff0c;中秋快乐&#xff0c;幸福美满&#xff01; 今天继续第11章的学习&#xff0c;主要学习…

FOTA介绍

0 Preface / Foreword 1 FOTA 1.1 FOTA介绍 FOTA&#xff1a;Firmware Over-the-Air (FOTA) 1.2 如何产生FOTA文件 (generate FOTA package) 第一步&#xff1a;打开FOTA package tool 第二步&#xff1a;选择flash download配置文件 文件名&#xff1a;flash_download.cf…

Python 常用模块(一):csv模块

目录 一、csv文件介绍二、csv模块2.1 csv模块介绍2.2 csv 模块的基本功能2.3 reader()方法——读取csv文件2.4 writer()方法——将数据写入csv文件2.5 DictWriter类——创建支持字典的csv文件2.6 DictReader类——创建字典类型的csv文件对象2.7 几个常用属性说明2.7.1 QUOTE_AL…

可怕,就算不点,也能中招!macOS神秘的零点击日历漏洞

你有没有想过,连点击都不需要,你的电脑就可能中招?最近的一个macOS漏洞——“零点击日历邀请漏洞”正是这样,它让人有点毛骨悚然。想象一下,你平时收到的那些日历邀请,可能一不留神就让你的系统陷入危机。而更恐怖的是,你根本不需要做任何操作,攻击就会在你眼皮底下悄无…

开发一款应用程序后要做的四件事

首先恭喜您开发了您的移动应用程序&#xff01;然而创建高质量的应用程序只是迈向成功的第一步。在当今竞争激烈的市场中&#xff0c;让用户发现您的应用至关重要。这就是应用商店优化 &#xff08;ASO&#xff09; 发挥作用的地方。 ASO 是优化应用在 Apple App Store 和 Goog…

ROS2 自定义消息 (ACT模型训练参数化为例)

0. 背景 Ubuntu20.04ROS2 foxyPython3.8 &#xff08;Anaconda&#xff09; 项目需要&#xff0c;要将ACT模型训练参数化&#xff08;GitHub - tonyzhaozh/act&#xff09;。 Qt UI ROS节点&#xff08;C&#xff09;&#xff1a;从json配置文件读取训练参数&#xff0c;自定义…

LEAN 赋型唯一性(Unique Typing)之 证明过程简介

LEAN论文在证明赋型唯一性&#xff08;Unique Typing &#xff09;时&#xff0c;引入了 n-provability 的概念&#xff0c;通过证明在 n-provability 情况下的赋型唯一性&#xff0c;来证明系统的 赋型唯一性。同时&#xff0c;在证明在 n-provability 情况下的赋型唯一性时&a…

Kubernetes实战——基于Helm安装Redis主从模式

目录 一、Helm介绍 1、三大概念 2、基本命令 二、NFS的安装和使用 1、安装NFS 2、NFS在K8s上使用 三、PV和PVC 1、定义 2、PV和PVC的生命周期 2.1、资源供应 2.2、资源绑定 2.3、资源使用 2.4、资源回收 3、创建PV 4、创建PVC 5、创建测试使用PVC的Pod 四、Stor…

基于Qt的串口调试工具

1.项目地址 https://github.com/zhangjiechina001/SerialPortTool 2.核心类 头文件 #ifndef SERIALPORTWRAP_H #define SERIALPORTWRAP_H #pragma execution_character_set("utf-8") #include <QObject> #include <QSerialPort>class SerialPortWrap :…

TDSQL数据库介绍

TDSQL是什么 TDSQL是腾讯云自研企业级分布式数据库&#xff0c;旗下涵盖金融级分布式、云原生、分析型等多引擎融合的完整数据库产品体系&#xff0c;提供业界领先的金融级高可用、计算存储分离、数据仓库、企业级安全等能力&#xff0c;同时具备智能运维平台、Serverless版本…

70、Python之函数式编程:一文搞懂函数式编程的核心概念

引言 从这篇文章开始&#xff0c;我打算稍微聊一下函数式编程&#xff0c;以及Python中对函数式编程有哪些支持&#xff0c;我们在Python中如何应用函数式编程。虽然不会对函数式编程做一个很详尽的讲述&#xff0c;但也会做一个简短的系列性讲述&#xff0c;以便于Python爱好…

响应式网站真的就只是多了一个媒体查询吗?

响应式网站不仅仅是多了一个媒体查询&#xff0c;而是通过一系列技术和设计理念的结合来实现自适应布局和内容展示。以下将详细分析响应式网站的多个方面&#xff1a; 技术基础 CSS3 Media Query&#xff1a;响应式设计的核心在于使用CSS3的媒体查询&#xff08;Media Query&a…

应用程序已被 Java 安全阻止:Java 安全中的添加的例外站点如何对所有用户生效

如题&#xff1a;应用程序已被 Java 安全阻止&#xff0c;如下图所示&#xff1a; 在寻找全局配置的时候花了一个上午的时间&#xff0c;到处搜解决方法&#xff0c;都不可行。最后还是参考官方的文档配置好了。如果你碰到了同样的问题&#xff0c;这篇文章一定可以帮到你。 环…

QT支持C/C++工业边缘计算网关带RS485、HDMI视频输出

ARM工业控制器是一种在工业领域广泛应用的设备&#xff0c;以下详细分析ARMxy ARM 工业控制器带 HDMI 支持 QT 应用于工业车间数据采集&#xff1a; 一、ARM 工业控制器概述 ARM 架构的优势&#xff1a; 低功耗&#xff1a;在工业环境中&#xff0c;长时间运行的设备需要较低…

uniapp性能优化专题

运行原理 逻辑层和视图层分离&#xff0c;且非 H5 端通信有折损 逻辑层详解 视图层详解 逻辑层和视图层分离的利与弊 app-vue 和小程序的数据更新&#xff0c;分页面级和组件级 优化建议 避免使用大图 优化数据更新 长列表 展示全部 #性能优化专题 #运行原理 #逻辑…

LDR6020,单C口OTG,充放一体新潮流!

PD&#xff08;Power Delivery&#xff09;芯片实现单Type-C接口输入和输出OTG&#xff08;On-The-Go&#xff09;功能&#xff0c;主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释&#xff1a; 一、PD芯片基础功能 …