Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

2023-05-16

目录

前言

本文涉及文章

其他相关文章

1.数据准备

1.1 数据来源

2.曲线展示

2.1 MPAndroidChart获取

2.2 数据对象获取

2.3 数据展示

3.曲线完善

3.1 图表背景、边框、网格线修改

3.2 X Y轴值的自定义

3.3 线条的渐变背景、值、点的修改

3.4 MarkerView的实现

3.5 X轴的位置调整、以及X Y 轴的刻度显示

4. 多条曲线

4.1 LineChart创建多条曲线

4.2 MarkerView显示所以曲线的X Y 轴值

5. 重置某条曲线

6. 最终效果图

前言
发现最新的MPAndroidChart和以前版本的使用有一些差距,就写下了现在新版的使用方法

注:2018-06-01更新,当前MPAndroidChart版本:3.0.3 

本文涉及文章
Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3.0)

Android图表控件MPAndroidChart——LineChart实现 X、Y轴以及原点线的直尺刻度样式

其他相关文章
Android图表控件MPAndroidChart——曲线图LineChart的使用(多条曲线)

Android图表控件MPAndroidChart——曲线图LineChart(多条曲线)动态添加数据

Android图表控件MPAndroidChart——柱状图BarChart的使用(多条柱状图)

Android图表控件MPAndroidChart——曲线图+柱状图 CombinedChart的使用 

本文将要实现的图表效果,个人财富收益图。

1.数据准备
1.1 数据来源
数据是抓包佣金宝的数据,将获取的数据存入.json文件。

json格式如下

Json 文件地址:

https://github.com/897532167/ChartManager/blob/master/app/src/main/assets/line_chart.json

2.曲线展示
2.1 MPAndroidChart获取
Github 地址:https://github.com/PhilJay/MPAndroidChart

依赖:

Project 的build.gradle文件中添加

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}
然后在 module中的build,gradle 中添加

implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
然而大多情况下,我们会根据自己的需求自定义MPAndroidChart库,则需要下载源码并将MPChartLib引入自己的项目中。

2.2 数据对象获取
在Android Studio app项目src同级目录下新建中新建assets文件夹,然后将步骤1.1得到的.json文件放入改文件夹中。

然后在获取.json文件中的json字符串并解析为对应的数据对象,可参考以下文章

相关文章:Android访问assets本地Json文件

在此就不详叙述了,只是列出图表展示所需要的类

/**
 * 我的收益
 */
public class IncomeBean {
    /**
     * tradeDate : 20180502
     * value : 0.03676598
     */
    private String tradeDate;
    private double value;
}
 
/**
 * 沪深创指数
 */
public class CompositeIndexBean {
    /**
     * rate : -0.00034196
     * tradeDate : 20180502
     */
    private String rate;
    private String tradeDate;
}
2.3 数据展示
2.3.1  LineChart 图表初始化设置

LineChart曲线图表一会使用到如下属性

    private LineChart lineChart;
    private XAxis xAxis;                //X轴
    private YAxis leftYAxis;            //左侧Y轴
    private YAxis rightYaxis;           //右侧Y轴
    private Legend legend;              //图例
    private LimitLine limitLine;        //限制线
//  private MyMarkerView markerView;    //标记视图 即点击xy轴交点时弹出展示信息的View 需自定义
然后进行相应的设置

/**
 * 初始化图表
 */
private void initChart(LineChart lineChart) {
    /***图表设置***/
    //是否展示网格线
    lineChart.setDrawGridBackground(false);
    //是否显示边界
    lineChart.setDrawBorders(true);
    //是否可以拖动
    lineChart.setDragEnabled(false);
    //是否有触摸事件
    lineChart.setTouchEnabled(true);
    //设置XY轴动画效果
    lineChart.animateY(2500);
    lineChart.animateX(1500);
 
    /***XY轴的设置***/
    xAxis = lineChart.getXAxis();
    leftYAxis = lineChart.getAxisLeft();
    rightYaxis = lineChart.getAxisRight();
    //X轴设置显示位置在底部
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setAxisMinimum(0f);
    xAxis.setGranularity(1f);
    //保证Y轴从0开始,不然会上移一点
    leftYAxis.setAxisMinimum(0f);
    rightYaxis.setAxisMinimum(0f);
 
    /***折线图例 标签 设置***/
    legend = lineChart.getLegend();
    //设置显示类型,LINE CIRCLE SQUARE EMPTY 等等 多种方式,查看LegendForm 即可
    legend.setForm(Legend.LegendForm.LINE);
    legend.setTextSize(12f);
    //显示位置 左下方
    legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
    legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
    legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
    //是否绘制在图表里面
    legend.setDrawInside(false);
}
2.3.2 LineDataSet 曲线初始化设置

/**
 * 曲线初始化设置 一个LineDataSet 代表一条曲线
 *
 * @param lineDataSet 线条
 * @param color       线条颜色
 * @param mode
 */
private void initLineDataSet(LineDataSet lineDataSet, int color, LineDataSet.Mode mode) {
    lineDataSet.setColor(color);
    lineDataSet.setCircleColor(color);
    lineDataSet.setLineWidth(1f);
    lineDataSet.setCircleRadius(3f);
    //设置曲线值的圆点是实心还是空心
    lineDataSet.setDrawCircleHole(false);
    lineDataSet.setValueTextSize(10f);
    //设置折线图填充
    lineDataSet.setDrawFilled(true);
    lineDataSet.setFormLineWidth(1f);
    lineDataSet.setFormSize(15.f);
    if (mode == null) {
        //设置曲线展示为圆滑曲线(如果不设置则默认折线)
        lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
    } else {
        lineDataSet.setMode(mode);
    }
}
2.3.3  曲线展示

/**
 * 展示曲线
 *
 * @param dataList 数据集合
 * @param name     曲线名称
 * @param color    曲线颜色
 */
public void showLineChart(List<IncomeBean> dataList, String name, int color) {
    List<Entry> entries = new ArrayList<>();
    for (int i = 0; i < dataList.size(); i++) {
        IncomeBean data = dataList.get(i);
        /**
         * 在此可查看 Entry构造方法,可发现 可传入数值 Entry(float x, float y)
         * 也可传入Drawable, Entry(float x, float y, Drawable icon) 可在XY轴交点 设置Drawable图像展示
         */
        Entry entry = new Entry(i, (float) data.getValue());
        entries.add(entry);
    }
    // 每一个LineDataSet代表一条线
    LineDataSet lineDataSet = new LineDataSet(entries, name);
    initLineDataSet(lineDataSet, color, LineDataSet.Mode.LINEAR);
    LineData lineData = new LineData(lineDataSet);
    lineChart.setData(lineData);
}
然后在Activity中调用

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_line_chart);
    lineChart = findViewById(R.id.lineChart);
    initChart(lineChart);
    LineChartBean lineChartBean = LocalJsonAnalyzeUtil.JsonToObject(this,
            "chart.json", LineChartBean.class);
    List<IncomeBean> list = lineChartBean.getGRID0().getResult().getClientAccumulativeRate();
    showLineChart(list, "我的收益", Color.CYAN);
}
注意:不了解数据怎么来的可查看 相关文章:Android访问assets本地Json文件 或者本文相关代码

此时的图形效果

线性图是有了,但离需要达到的效果差了很多很多,所有需要一点点的完善。

3.曲线完善
首先总结哪里需要进行修改完善,然后一一进行修改,需要的修改的地方如下。

图表背景、边框、网格的修改
X Y轴值的自定义
线条的渐变背景、值、点 的修改
MarkerView的实现
X轴的位置、X Y 轴的刻度展示(需要修改源码、放最后来处理)
3.1 图表背景、边框、网格线修改
修改背景,去掉边框

lineChart.setBackgroundColor(Color.WHITE);
//是否显示边界
lineChart.setDrawBorders(false);
网格线修改

在2.3.1步的我们已经设置了禁止显示网格线

//是否展示网格线
lineChart.setDrawGridBackground(false);
但还是显示了网格线,而且不是我们想要的 虚线 。其实那是 X Y轴自己的网格线,禁掉即可

xAxis.setDrawGridLines(false);
rightYaxis.setDrawGridLines(false);
leftYAxis.setDrawGridLines(true);
设置X Y轴网格线为虚线(实体线长度、间隔距离、偏移量:通常使用 0)

leftYAxis.enableGridDashedLine(10f, 10f, 0f);
目标效果图没有右侧Y轴,所以去掉右侧Y轴

rightYaxis.setEnabled(false);
现在的效果图

3.2 X Y轴值的自定义
目标图的效果是 X轴显示日期,Y轴显示百分比而且均分10份

数据获取到的时间为 20180502 我们需要显示 05-02 所以需要进行日期转换

一个日期转换工具

public class DateUtil {
 
    public static String formatDate(String str) {
        SimpleDateFormat sf1 = new SimpleDateFormat("yyyyMMdd");
        SimpleDateFormat sf2 = new SimpleDateFormat("MM-dd");
        String formatStr = "";
        try {
            formatStr = sf2.format(sf1.parse(str));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return formatStr;
    }
}
X轴值的定义

在 showLineChart 方法中我们会传入X轴的值,所以自定义X轴的值可以 写在该方法内

xAxis.setValueFormatter(new IAxisValueFormatter() {
    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        String tradeDate = dataList.get((int) value % dataList.size()).getTradeDate();
        return DateUtil.formatDate(tradeDate);
    }
});
注:目标图的数据是5月2日到5月28日,而本文所使用的数据是5月2日至5月25日。且数据日期是不包含周末的

X轴的间隔的实现,数据一共有18条,目标图是按照3天一间隔(因为无周末数据的关系,日期上看可能不是那样)

设置X轴分割数量

xAxis.setLabelCount(6,false);
true代表强制均分,可能会导致数据显示不均匀

Y轴值的自定义

与X轴值得自定义类似,并按照目标图的分割要求一样 将Y轴分为 8份

leftYAxis.setValueFormatter(new IAxisValueFormatter() {
    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return ((int) (value * 100)) + "%";
    }
});
leftYAxis.setLabelCount(8);
然后此时的效果

3.3 线条的渐变背景、值、点的修改
线条渐变线

新建一个方法

/**
 * 设置线条填充背景颜色
 *
 * @param drawable
 */
public void setChartFillDrawable(Drawable drawable) {
    if (lineChart.getData() != null && lineChart.getData().getDataSetCount() > 0) {
        LineDataSet lineDataSet = (LineDataSet) lineChart.getData().getDataSetByIndex(0);
        //避免在 initLineDataSet()方法中 设置了 lineDataSet.setDrawFilled(false); 而无法实现效果
        lineDataSet.setDrawFilled(true);
        lineDataSet.setFillDrawable(drawable);
        lineChart.invalidate();
    }
}
然后 drawable 文件中 创建渐变样式 fade_blue.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="90"
        android:endColor="#FF6FA9E1"
        android:startColor="#00ff0000" />
</shape>
再调用该方法

showLineChart(list, "我的收益", getResources().getColor(R.color.blue));
Drawable drawable = getResources().getDrawable(R.drawable.fade_blue);
setChartFillDrawable(drawable);
线条点和值的更改

不显示点,在 initLineDataSet方法中添加

lineDataSet.setDrawCircles(false);
线条值的更改

目标图的效果是不显示 值,但有时候还是会要求显示值,而且还要求更高 线条X值的显示内容 

所以在此介绍一下更改 曲线显示自定义X值的内容 

lineDataSet.setValueFormatter(new IValueFormatter() {
    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        DecimalFormat df = new DecimalFormat(".00"); 
        return df.format(value * 100) + "%";
    }
});
会发现只要是自定义 值的显示内容 都是Chart对应的部分.setValueFormatter()。

现在的效果(修改了宽高)

不显示值

lineDataSet.setDrawValues(false);
3.4 MarkerView的实现
要求是点击曲线的点,然后弹出一个View 显示当前的日期,以及我的收益

即 MarkView 显示X Y 轴的值

1.搭建MarkView的布局文件 layout_markview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_square"
    android:orientation="vertical">
 
    <TextView
        android:id="@+id/tv_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white" />
 
    <TextView
        android:id="@+id/tv_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:textColor="@android:color/white" />
 
</LinearLayout>
其中背景 shape_square.xml 是圆角透明灰背景

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="5dp" />
    <stroke
        android:width="1px"
        android:color="@color/transparent_gray" />
    <solid android:color="@color/transparent_gray" />
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />
</shape>
2.自定义MarkerView

public class LineChartMarkView extends MarkerView {
 
    private TextView tvDate;
    private TextView tvValue;
    private IAxisValueFormatter xAxisValueFormatter;
    DecimalFormat df = new DecimalFormat(".00");
 
    public LineChartMarkView(Context context, IAxisValueFormatter xAxisValueFormatter) {
        super(context, R.layout.layout_markview);
        this.xAxisValueFormatter = xAxisValueFormatter;
 
        tvDate = findViewById(R.id.tv_date);
        tvValue = findViewById(R.id.tv_value);
    }
 
    @SuppressLint("SetTextI18n")
    @Override
    public void refreshContent(Entry e, Highlight highlight) {
        //展示自定义X轴值 后的X轴内容
        tvDate.setText(xAxisValueFormatter.getFormattedValue(e.getX(), null));
        tvValue.setText("我的收益:" + df.format(e.getY() * 100) + "%");
        super.refreshContent(e, highlight);
    }
 
    @Override
    public MPPointF getOffset() {
        return new MPPointF(-(getWidth() / 2), -getHeight());
    }
}
注:这种方式是显示自定义X轴值后的 x轴内容,只是靠e.getX()得到的float类型,无法满足我们的要求

3.设置MarkView

/**
 * 设置 可以显示X Y 轴自定义值的 MarkerView
 */
public void setMarkerView() {
    LineChartMarkView mv = new LineChartMarkView(this, xAxis.getValueFormatter());
    mv.setChartView(lineChart);
    lineChart.setMarker(mv);
    lineChart.invalidate();
}
调用该方法即可

此时的效果

3.5 X轴的位置调整、以及X Y 轴的刻度显示
X Y 轴的刻度显示,以及位置调整可查看我的另一篇文章

相关文章:Android图表控件MPAndroidChart——LineChart实现 X、Y轴以及原点线的直尺刻度样式

发现图表的右下角还有一个描述标签 Descripition Lable 需要在LineChart初始化时设置一下

        Description description = new Description();
//        description.setText("需要展示的内容");
        description.setEnabled(false);
        lineChart.setDescription(description);
此时的效果

4. 多条曲线
当前只是实现了展示一条曲线,而目标图需要实现两条(多条曲线)

4.1 LineChart创建多条曲线
前面说过 一个LineDataSet就是一条曲线,需要两条曲线的时候 在创建一个LineDataSet 添加进去即可

/**
 * 添加曲线
 */
private void addLine(List<CompositeIndexBean> dataList, String name, int color) {
    List<Entry> entries = new ArrayList<>();
    for (int i = 0; i < dataList.size(); i++) {
        CompositeIndexBean data = dataList.get(i);
        Entry entry = new Entry(i, (float) data.getRate());
        entries.add(entry);
    }
    // 每一个LineDataSet代表一条线
    LineDataSet lineDataSet = new LineDataSet(entries, name);
    initLineDataSet(lineDataSet, color, LineDataSet.Mode.LINEAR);
    lineChart.getLineData().addDataSet(lineDataSet);
    lineChart.invalidate();
}
然后调用改方法即可,也可以在 showLineChart方法中 创建两条曲线。

showLineChart(list, "我的收益", getResources().getColor(R.color.blue));
 
List<CompositeIndexBean> indexBeanList = lineChartBean.getGRID0().getResult().getCompositeIndexShanghai();
addLine(indexBeanList, "上证指数", getResources().getColor(R.color.orange));
此时的效果

4.2 MarkerView显示所以曲线的X Y 轴值
现在两条曲线了,前面MarkerView只是显示的 我的收益 的数据。现在需要显示所有曲线的的值

也就是在MarkerView 的 refreshContent中需要获取到我们展示的数据。

两种方式可以实现:

一:通过MarkerView构造方法 传入我们所展示的数据的集合 

二:通过MarkerView 获取到当前的LineChart,然后通过LineChart获取LineData,图表展示的数据 都在LineData中可以得到

采用方式二比较方便,代码如下:

public class LineChartMarkView extends MarkerView {
 
    private TextView tvDate;
    private TextView tvValue0;
    private TextView tvValue1;
    private IAxisValueFormatter xAxisValueFormatter;
    DecimalFormat df = new DecimalFormat("0.00");
 
    public LineChartMarkView(Context context, IAxisValueFormatter xAxisValueFormatter) {
        super(context, R.layout.layout_markview);
        this.xAxisValueFormatter = xAxisValueFormatter;
        tvDate = (TextView) findViewById(R.id.tv_date);
        tvValue0 = (TextView) findViewById(R.id.tv_value0);
        tvValue1 = (TextView) findViewById(R.id.tv_value1);
    }
 
    @SuppressLint("SetTextI18n")
    @Override
    public void refreshContent(Entry e, Highlight highlight) {
        Chart chart = getChartView();
        if (chart instanceof LineChart) {
            LineData lineData = ((LineChart) chart).getLineData();
            //获取到图表中的所有曲线
            List<ILineDataSet> dataSetList = lineData.getDataSets();
            for (int i = 0; i < dataSetList.size(); i++) {
                LineDataSet dataSet = (LineDataSet) dataSetList.get(i);
                //获取到曲线的所有在Y轴的数据集合,根据当前X轴的位置 来获取对应的Y轴值
                float y = dataSet.getValues().get((int) e.getX()).getY();
                if (i == 0) {
                    tvValue0.setText(dataSet.getLabel() + ":" + df.format(y * 100) + "%");
                }
                if (i == 1) {
                    tvValue1.setText(dataSet.getLabel() + ":" + df.format(y * 100) + "%");
                }
            }
            tvDate.setText(xAxisValueFormatter.getFormattedValue(e.getX(), null));
        }
        super.refreshContent(e, highlight);
    }
 
    @Override
    public MPPointF getOffset() {
        return new MPPointF(-(getWidth() / 2), -getHeight());
    }
}
此时的图表

5. 重置某条曲线
经过前面的几步图表是基本完成了,就差底部的切换按钮以及曲线重置了。

布局代码在此就不展示了,详细代码请看文本 本文相关代码。在此列出重置曲线方法的代码

public void resetLine(int position, List<CompositeIndexBean> dataList, String name, int color) {
    LineData lineData = lineChart.getData();
    List<ILineDataSet> list = lineData.getDataSets();
    if (list.size() <= position) {
        return;
    }
 
    List<Entry> entries = new ArrayList<>();
    for (int i = 0; i < dataList.size(); i++) {
        CompositeIndexBean data = dataList.get(i);
        Entry entry = new Entry(i, (float) data.getRate());
        entries.add(entry);
    }
 
    LineDataSet lineDataSet = new LineDataSet(entries, name);
    initLineDataSet(lineDataSet, color, LineDataSet.Mode.LINEAR);
 
    lineData.getDataSets().set(position, lineDataSet);
    lineChart.invalidate();
}
调用该方法,将第二条曲线设置为深证指数

shenzheng = lineChartBean.getGRID0().getResult().getCompositeIndexShenzhen();
resetLine(1, shenzheng, "深证指数", getResources().getColor(R.color.orange));
设置不显示曲线名称(图例)Legend

legend.setEnabled(false);
6. 最终效果图


本文代码:https://github.com/897532167/ChartManager

绘制刻度线:Android图表控件MPAndroidChart——LineChart实现 X、Y轴以及原点线的直尺刻度样式
--------------------- 

原文:https://blog.csdn.net/ww897532167/article/details/74129478 
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图) 的相关文章

  • Android 在布局容器中动态添加控件

    这里 xff0c 通过一个小demo xff0c 就可以掌握在布局容器中动态添加控件 xff0c 以动态添加Button控件为例 xff0c 添加其他控件同样道理 1 addView 添加控件到布局容器 2 removeView 在布局容器
  • delphi offsetof , container_of 通过结构体成员获得到该结构体地址

    C宏 offsetof type member 该结构体成员相对于该结构体的偏移量 define offsetof TYPE MEMBER size t amp TYPE 0 gt MEMBER 那Delphi版的表示式怎么写呢 Nativ
  • Android 动态添加Button(1)

    这是一个非常简单的动态添加Button的例子 xff1a package com kkkk llll import android app Activity import android os Bundle import android w
  • 将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果微笑

    将一串随机数输入到二维坐标轴中 xff0c 不断刷新JPanel 实现动态显示的效果 import java awt BasicStroke import java awt BorderLayout import java awt Colo
  • onDraw什么时候被调用?

    1 onDraw是在View初化完成之后开始调用 2 postInvalidate 是重绘的 xff0c 也就是调用postInvalidate 后系统会重新调用onDraw方法画一次 onDraw实例 xff1a Java code 64
  • Android 动态绘制曲线等各种图形

    Android 中动态的绘制有两种方法 xff0c 一种是用OpenGL ES xff0c 它主要用来做3D图形开发 xff0c 对于一般的应用 xff0c 我们会采取自定义一个View xff0c 然后覆盖onDraw 的方法 xff0c
  • Android 曲线图绘制

    最近项目里要做一个简单的曲线图来标识数据 xff0c 开始以为很简单 xff0c android已经有那么多的开源图表库了 xff0c 什么achartenginee hellochart xff0c mpandroidchart等等 xf
  • android中在代码中动态布按钮和画板局并绘制曲线

    strong 绘图面板基类继承View strong package com mytest myapplication Utility import android graphics Color import android util Lo
  • html5 div布局与table布局

    div布局 xff1a html 43 css实现简单布局 container中height不能写成百分数 xff0c 必须为具体高度 lt DOCTYPE html gt lt html gt lt head lang 61 34 en
  • andorid程序UI线程下开启子线程闪退错误解决

    android view ViewRootImpl CalledFromWrongThreadException Only the original 运行时报 android view ViewRootImpl CalledFromWron
  • Android子线程更新UI的方法总结

    消息机制 xff0c 对于Android开发者来说 xff0c 应该是非常熟悉 对于处理有着大量交互的场景 xff0c 采用消息机制 xff0c 是再好不过了 有些特殊的场景 xff0c 比如我们都知道 xff0c 在Android开发中
  • android中多线程绘制曲线图实例

    画板基类继承view package com mytest myapplication Utility import android graphics Color import android util Log import android
  • InterlockedCompareExchangePointer 的作用和例子

    PVOID InterlockedCompareExchangePointer in out PVOID volatile Destination in PVOID Exchange in PVOID Comperand Interlock
  • java读取xml文件的四种方法

    Xml代码 1 lt xml version 61 34 1 0 34 encoding 61 34 GB2312 34 gt 2 lt RESULT gt 3 lt VALUE gt 4 lt NO gt A1234 lt NO gt 5
  • Android多线程之同步锁的使用

    本文主要介绍了Android多线程之同步锁的使用 xff0c 分享给大家 xff0c 具体如下 xff1a 一 同步机制关键字synchronized 对于Java来说 xff0c 最常用的同步机制就是synchronized关键字 xff
  • C#使用 System.Net.Mail发送邮件功能

    C 使用 System Net Mail发送邮件功能 NET 里包含了很多很丰富的邮件发送与接受的API在 System Net Mail命名空间里 xff0c 使得我们开发发送和接受邮件相关功能变得简单 xff0c 下面是一个简单发送邮件
  • C#SMTP发邮件

    简单邮件传输协议 Simple Mail Transfer Protocol SMTP 是事实上的在Internet传输email的标准 C 邮件传输主要用到了 SmtpClient 和MailMessage 类 SmtpClient类是客
  • C#发送邮件实例

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • closehandle()函数

    引用自 百度百科 xff0c 用于解决今天遇到的close handle 后什么时候释放资源问题 xff1a 方法名称 xff1a CloseHandle 位置 xff1a Kernel32 dll BOOL CloseHandle HAN
  • c++清空串口缓冲区

    缓冲区控制 Win32通信API除了提供SetupComm 函数实现初始化的缓冲区控制外 xff0c 还提供了PurgeComm 函数和FlushFileBuffers 函数来进行缓冲区操作 PurgeComm 函数的声明如下 xff1a

随机推荐

  • C++ int与string的转化

    int本身也要用一串字符表示 xff0c 前后没有双引号 xff0c 告诉编译器把它当作一个数解释 缺省情况下 xff0c 是当成10进制 xff08 dec xff09 来解释 xff0c 如果想用8进制 xff0c 16进制 xff0c
  • c++中字符数组内存和指针问题示例解答

    char id 61 34 123456 34 char c 61 34 SN 61 34 unsigned char buffer 20 int j 61 0 for int i 61 0 i lt strlen c i 43 43 bu
  • c++中LPCTSTR,LPTSTR 解释

    char是C语言标准数据类型 xff0c 字符型 xff0c 至于由几个字节组成通常由编译器决定 xff0c 一般一个字节 Windows为了消除各编译器的差别 xff0c 重新定义了一些数据类型 xff0c 你提到了另外几个类型都是这样
  • Delphi 自定义事件的例子

    我们这个控件将演示控件的自定义事件的书写 这个控件有一个类型为string的SensitiveText属性 xff0c 当用户在输入框中输入的文字为InvalidText时就会触发OnSensitiveText事件 按照惯例 xff0c 我
  • c++中sscanf的用法

    sscanf 读取格式化的字符串中的数据 swscanf 是 sscanf 的宽字符版本 xff1b swscanf 的参数是宽字符串 swscanf不处理 Unicode 全角十六进制或 34 兼容性区 34 字符 除此以外 xff0c
  • c++内存测试

    void MemoryTest 内存测试 指针嵌套 char rr 栈中分配内存 系统自动分配释放 xff09 int ee 61 int amp rr 将rr的内存地址转换成整型数 char yy 61 amp rr 定义一个字符型指针y
  • C/C++串口通信原理及读写与操作

    http wangbaiyuan cn c serial communication write reading html 展开 文章目录 在工业控制中 xff0c 工控机 xff08 一般都基于Windows平台 xff09 经常需要与智
  • c# 调用c库dll ,char*转string的解决办法

    最近由于有个未知的设备需要用到modbus通讯协议 xff0c 底层需要与PLC通讯 xff0c 坤跌 xff0c PLC啥型号也不清楚封在里面不能拆 前人只留了几个不能运行的QT代码以及不完整的文档 用惯了C 想要重新学QT xff0c
  • C++多线程编程(入门实例)

    多线程在编程中有相当重要的地位 xff0c 我们在实际开发时或者找工作面试时总能遇到多线程的问题 xff0c 对多线程的理解程度从一个侧面反映了程序员的编程水平 其实C 43 43 语言本身并没有提供多线程机制 xff08 当然目前C 43
  • Android Studio 使用Log

    Android使用log来记录信息 xff0c 测试了下 xff0c 和system out println区别不大 xff0c 主要优势在于能使用过滤器过滤日志 本文记录基础的log使用方法 xff0c 来自 第一行代码 xff0c 以及
  • 指针强制转换问题

    void ff void abc 任意类型数据指针 xff08 指针即内存地址 xff09 int z 61 int abc 强制转换成int 指针变量 int zz 61 z 获取内存中的值
  • 新手git教程

    本文转载自 xff1a http igeekbar com igeekbar post 82 htm Git近些年的火爆程度非同一般 xff0c 这个版本控制系统被广泛地用在大型开源项目 xff08 比如Linux xff09 xff0c
  • 使用Project进行项目管理

    下面开始介绍Project的使用 1 从下列地址获取Project 2010的副本 版权问题 xff0c 已删除地址 2 安装 2 1 版权页 2 2 自定义安装页 2 3 安装完毕 3 使用该软件进行项目管理 3 1 打开Project
  • Marshal在C#中的应用(void *指针到IntPtr的转化)

    C 调用C语言的API时一般把void 指针转换成IntPtr xff0c 但这经常远远不够的 在C语言中void 是个万金油 xff0c 尤其是一些老的c语言程序 xff0c 所有的参数就一个void 指针 xff0c 里面包罗万象 xf
  • VS2012 2013 无法显示查找功能 无法具体定位 解决方法

    xfeff xfeff 问题的现象 通过使用 Ctrl 43 Shift 43 F 也就是Find In Files功能 xff0c 使用之后只能显示统计结果 不显示具体行 如下图 regedit 中在注册表中查找 xff1a HKEY C
  • C#中使用指针转换数据类型[C#/unsafe]

    今日因为一个同事说起 xff0c 在原来的旧系统中使用指针做数据转换很方便 xff0c 比如要把浮点数转化为数组 xff0c 也或者是字符串的相互转换 xff1b 当然 xff0c 大家都知道c 中实现指针只需要写入unsafe 编译选项把
  • c#指针的使用例程

    unsafe double value 61 888888 byte v1 61 BitConverter GetBytes value byte v2 61 new byte v1 Length double pv 61 amp valu
  • MPAndroidChart LineChart 折线图 你要的都在这里了

    前言 MPAndroidChart已经出了很长的一段时间 xff0c 相信大家也有所耳闻 xff0c 自己也使用了有一段时间 xff0c 固在此写下文章 xff0c 根据项目的需求 xff0c 记录一些见解与问题 xff0c 作为参考 望大
  • Android Chart框架 MPAndroidChart 坐标轴设置

    1 轴线的绘制 设置轴线就先必须取得轴线类Axis 在一个图标中有三个轴线 xff1a x轴 xff1a 调用 getXAxis 获取左边y轴 xff1a 调用 getAxisLeft 获取右边y轴 xff1a 调用 getAxisRigh
  • Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1 数据准备 1 1 数据来源 2 曲线展示 2 1 MPAndroidChart获取 2 2 数据对象获取 2 3 数据展示 3 曲线完善 3 1 图表背景 边框 网格线修改 3 2 X Y轴值的自