使用 Embedded Chart 自定义图表控件和背景图

# C# Chart 折线图设置区域背景色 C# Chart 折线图设置区域背景色 在某些情况下需要将大于某数据阈值的部分设为不同的背景色,如将Y轴分为三个不同背景色的区间,而chart自带的控件似乎并不存在该设置,需要使用其他辅助设置,此处采用绘制线条的方法,设置一定的线条宽度,达到不同背景色的视觉效果,代码如下: /// <summary> /// 在Y轴上画一条平行于X轴的线 /// </summary> /// <param name="linePosition" 阅读详情

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

在ACE 中,Embedded Chart实际上是一个 GraphicalView对象。与一般的Chart不同,它可以嵌入到另一个Activity中(其实就是一个普通的 view),而不必通过Intent来调用。这样做的好处在于,我们可以更灵活地定制这个GraphicalView ,比如在图表中放置一些其他的view,比如按钮、图片等。

下面我们演示如何使用 Embedded Chart。 可以看到,在这个自定义的折线图中,我们不但在GraphicalView上加入了一个Label控件和一个按钮,甚至还显示了自己的背景图。

 

AndroidMainifest.xml

在其中加入一个新的Activity,比如就叫做test.ace.EmbeddedChart:

<activity android:name="test.ace.EmbeddedChart"/>

这是一个普通的Activity类,我们在其中嵌入一个GraphicalView,以演示EmbeddedChart 的例子。下面我们来实现这个Activity。

Layout 文件

一个Activity一个xml布局文件,这里也不例外,我们把它命名为embeddedchart.xml,放在res/layout 目录下:

 <?xml version="1.0" encoding="utf-8"?>
<!-- 注意 android:background 属性的使用,为 Activity 加了一个背景图 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent" android:background="@drawable/icon"
    android:layout_height="fill_parent">

    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="Embedded Chart 演示" />    
    

    <Button android:id="@+id/button1" android:text="button1"
            android:layout_width="wrap_content"    android:layout_height="wrap_content" />

     <!-- 这个 LinearLayout 用于放置 GraphicalView -->
    <LinearLayout android:id="@+id/chart" android:orientation="horizontal"
        android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" />
</LinearLayout>

EmbeddedChart.java

这个就是Activity 类的实现,在其中我们用GraphicalView 生成了一个折线图并嵌入其中:

首先我们声明几个成员变量:

privateXYMultipleSeriesDataset ds;

privateXYMultipleSeriesRenderer render;

private XYSeries series;

private GraphicalView gv;

 

private XYSeriesRenderer xyRender;

 

除了private GraphicalView gv 是Embedded Chart 特别要用到的之外,所有变量都是我们前面画柱状图和折线图中已经用到过的。

接下来是两个特殊方法:

protected voidonSaveInstanceState(Bundle outState) {

  Log.i("onSaveInstanceState","onSaveInstanceState");

  super.onSaveInstanceState(outState);

  outState.putSerializable("dataset", ds);

  outState.putSerializable("renderer", render);

  outState.putSerializable("current_series", series);

  outState.putSerializable("current_renderer", xyRender);

}

// 恢复 Activity 时,反序列化已保存的数据。

protected voidonRestoreInstanceState(Bundle savedState) {

  Log.i("onRestoreInstanceState","onRestoreInstanceState");

  super.onRestoreInstanceState(savedState);

  ds = (XYMultipleSeriesDataset) savedState.getSerializable("dataset");

  render = (XYMultipleSeriesRenderer) savedState.getSerializable("renderer");

  series = (XYSeries) savedState.getSerializable("current_series");

  xyRender = (XYSeriesRenderer) savedState.getSerializable("current_renderer");

}

这两个方法是专门用于在Activity挂起操作、唤醒操作时使用的。比如程序运行过程中用户按下了Home键或接听键(挂起),以及Activity被挂起后又再次被启动(唤醒)。

onSaveInstanceState 方法在挂起时被调用,我们在这里使用序列化方法(putSerializable方法)把Activity的成员变量储存到Bundle。

onRestoreInstanceState 方法在 Activity 唤醒时调用,在此我们使用反序列化方法(getSerializable方法)从Bundle中恢复成员变量的值。

此外,还有两个方法也是成对使用的。

// 注意,在调用 onCreate 之后会调用 onResume

protected void onResume() {

  Log.i("onResume","onResume");

  super.onResume();

  if(ds==null)getDataset();

  if(render==null)getRenderer();

  if (gv == null) {

   LinearLayout layout =(LinearLayout) findViewById(R.id.chart);

   gv = ChartFactory.getLineChartView(this, ds, render);

   layout.addView(gv, newLayoutParams(LayoutParams.FILL_PARENT,

     LayoutParams.FILL_PARENT));

  } else {

   // 绘制图形

   gv.repaint();

  }

}

// 注意每次startActivity(this,EmbeddedChart.class) 之后会调用 onCreate

protected void onCreate(BundlesavedInstanceState) {

  Log.i("onCreate","onCreate");

  // 初始化 Activity 视图

  super.onCreate(savedInstanceState);

  setContentView(R.layout.embeddedchart);

}

一般来说,只要用startActivity方法启动的Activity,都会依次调用该Activity的onCreate方法和onResume方法。

onCreate方法很简单就不说了。在onResume方法中,我们调用getDataset方法构造了折线图的点数据,用getRenderer方法构造了折线图的Renderer,然后用ChartFactory.getLineChartView构造了一个GraphicalView,最后把这个GraphicalView 加到id为chart的LinearLayout中。于是在 Activity 上显示了折线图。

最后是getDataset和getRenderer 方法的实现:

privateXYMultipleSeriesDataset getDataset() {

        ds = newXYMultipleSeriesDataset();

        final int nr = 10;// 每个系列种包含10个随机数

        Random r = new Random();

        for (int i = 0; i < 1;i++) {

         // 新建一个系列(线条)

         series = new XYSeries("Series" + (i + 1));

          for (int k = 0; k < nr;k++) {

           int x=r.nextInt()%10;// x:0-10之间的随机整数

           inty=50+r.nextInt()%50;// y:50-100之间的随机整数

            series.add(x,y);// 往系列中加入一个随机分布的点

          }

          // 把添加了点的折线放入dataset

          ds.addSeries(series);

        }

       

        return ds;

     }

    publicXYMultipleSeriesRenderer getRenderer() {

     // 新建一个xymultipleseries

        render = newXYMultipleSeriesRenderer();

        render.setAxisTitleTextSize(16);  // 设置坐标轴标题文本大小

        render.setChartTitleTextSize(20);  // 设置图表标题文本大小

        render.setLabelsTextSize(15);   // 设置轴标签文本大小

        render.setLegendTextSize(15);   // 设置图例文本大小

        render.setMargins(new int[] {20, 30, 15,0});  // 设置4边留白

        render.setPanEnabled(false, false);  // 设置x,y坐标轴不会因用户划动屏幕而移动

        // 设置4边留白透明

        //

        render.setMarginsColor(Color.argb(0,0xff, 0, 0));  

        render.setBackgroundColor(Color.TRANSPARENT);  // 设置背景色透明

        render.setApplyBackgroundColor(true); // 使背景色生效

        // 设置一个系列的颜色为蓝色

        xyRender = newXYSeriesRenderer();

        xyRender.setColor(Color.BLUE);

        // 往xymultiplerender中增加一个系列

        render.addSeriesRenderer(xyRender);

        return render;

      }

这两个方法在前面《使用 AChartEngine 画折线图》已有介绍,就不多说了。唯一值得注意的是,在使用setMarginsColor 方法设置4边背景色透明时,不能使用 Color.TRANSPARENT 或者 DefaultRenderer.NO_COLOR,这两个透明色在setMarginsColor 方法中是无效的,要用该方法设置4边透明只能用 Color.argb 方法。 argb (int alpha, int red, int green, int blue) 方法的第1个参数alpha值为00时可以获得透明色,其他颜色值任意,例如:0x00ff0000。而setBackgroundColor 方法中 Color.TRANSPARENT 是有效的——它可以把 chart 的中心区域的背景设置为透明色。不知是否是 bug。

 

EmbeddedChart的调用

要使用这个EmbeddedChart类跟一般的Activity没有任何区别,直接在另一个Activity中使用下面的语句:

intent=new Intent(this,EmbeddedChart.class);

startActivity(intent);

程序运行后如下图所示:


           

给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
这里写图片描述
功能完善的表格设计工具及OCX控件,支持模板在Web上的应用,支持 功能完善的表格设计工具及OCX控件,支持模板在Web上的应用,支持套打,可设置静态文本和变量的背景颜色和字体颜色(3997) 立即下载

相关推荐

AChartEngine 折线图和EmbeddedChart示例

AChartEngine 折线图和EmbeddedChart示例

安卓图表:achartengine之动态柱状图(一)

动态柱状图

A125679880的博客 1074

【AI方案集】个人记忆库型AI智能体终身伴侣方案.docx

这套AI技术方案不走“先堆概念再硬套场景”的老路,而是以业务痛点为锚点,把机器视觉识别、预测性分析、大模型知识赋能等能力拆解成轻量化可落地的功能模块,直接嵌入生产运营的关键环节,既能快速落地见效,又能通过持续的数据迭代逐步放大价值,帮企业在不盲目新增硬件投入的前提下,稳步完成智能化升级,实实在在把AI变成能降本、提效、控风险的生产工具。

AlphaControls 控件 Tchart组件更换背景

AlphaControls 不支持Delphi TChar换肤,仅能对TChar更换与 AlphaControls背景一致的背景。

lyhoo163的专栏 4034

【UE5+Quest3】手部模型替换---3-0

这次手部模型替换遇到了一些小问题,不过好在是bug一个个都处理掉了,我会分开几个章节去整理。详细的视频教程可以参考油管大佬的视频手部素材放到文章末尾,自行下载使用。(仅用作学习研究,不可用于商用)

qbbmnnnnnn的博客 946

Doris Streamloader安装教程

Doris Streamloader 是一款用于将数据导入 Doris 数据库的专用客户端工具。本文介绍其在centos7环境下的安装过程

qq_44540985的博客 1091

微软C#中的CHART图表控件

http://www.cnblogs.com/winshe/articles/6604406.html https://blog.youkuaiyun.com/akof1314/article/details/5710866 http://www.360doc.com/content/13/1016/10/9981262_321805184.shtml 在.NET环境下微软提供了强大了图表控件,并给多了很多实例,关于图表的基本元素如下: 在这里,我仅作为自己理解的,并实践的,以中文方式写出步骤,未免出错,还请参照MS

weixin_42579159的博客 8249

linux redis7 完整的集群搭建过程

一。安装: 1.1 说明: Redis官方只提供了源码,并没有提供经过编译之后的安装包。 因此,安装Redis,要先编译、后安装。(即源码安装方式) 注意:需要联网安装 1.2 安装编译的工具: yum install gcc gcc-c++ -y 1.3 下载tar包,上传到linux服务器,解压配置环境变量 1.4 cd +解压的目录下:编译 make 注意:如果编译失败,请重新进行解压编译,...

m0_38028438的博客 719

使用 Embedded Chart 自定义图表控件和背景图

在ACE 中,Embedded Chart实际上是一个 GraphicalView对象。与一般的Chart不同,它可以嵌入到另一个Activity中(其实就是一个普通的 view),而不必通过Intent来调用。这样做的好处在于,我们可以更灵活地定制这个GraphicalView ,比如在图表中放置一些其他的view,比如按钮、图片等。 下面我们演示如何使用 Embedded Chart。 可以看...

wangpengfei360 183

LLM大模型基础知识【一】

大语言模型(LLM):是指在自然语言处理(Natural Language Processing,NLP)领域中的一类大模型,通常用于处理文本数据和理解自然语言。这类大模型的主要特点是它们在大规模语料库上进行了训练,以学习自然语言的各种语法、语义和语境规则。例如:GPT系列(OpenAI)、Bard(Google)、文心一言(百度)。视觉大模型:是指在计算机视觉(Computer Vision,CV)领域中使用的大模型,通常用于图像处理和分析。

lin_xi_xi的博客 2880

得物APP破解

本文介绍了得物App(版本4.74.5)的逆向破解过程,重点分析了绕过强制更新、抓包技巧以及破解newSign参数的详细方法。首先通过断网再联网的方式绕过强制更新,然后使用SocksDroid进行抓包分析,发现首页推荐接口需要newSign参数。通过反编译定位到RequestUtils.c方法,利用Frida进行Hook验证,最终解析出newSign的生成逻辑:将请求参数加入固定字段后排序拼接,再进行MD5加密生成签名。文中提供了完整的Hook脚本和签名算法分析,仅供学习移动安全技术参考。

m0_74653634的博客 3498

C# Chart控件使用心得

Chart

zhengyingcan的专栏 1万+

华为OD机试真题2025双机位C卷 Java&Go 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 393

QtCharts:给QChartView添加背景图片

​因为平时很少用QCharts,所以对一些样式自定义的设置不熟悉。本来想添加一个背景图片,结果发现只有setBackgroundBrush这种接口。百度一通之后,只找到个隐藏QChart背景的博客(https://blog.youkuaiyun.com/qq_40182127/article/details/82113267)。受到启发,自己一番折腾,总算把背景给设置出来了,原来也挺简单的。

龚建波 1万+

2026华为OD面试题029:勇攀数字高峰

在给定的数字地形图里寻找登山路径,数字代表当前位置的海拔高度。要求从最低海拔出发,不断攀登,最终到达最高山峰。地图保证最低海拔和最高山峰都只有一个。 登山规则: - 路径上的海拔必须严格递增 - 只能向上下左右 4 个方向移动 - 路径必须从最低海拔开始,到最高海拔结束 - 每个地点只能走一次 - 每一步的攀登高度差必须大于 0,且不超过指定值 `K` 输出满足条件的登山路径的数量。

琅嬛福地 121

手把手教你学Simulink——基于Simulink的PMSM MTPA + FW 全速域平滑切换策略

本文提出一种基于Simulink的PMSM全速域平滑切换控制策略,通过融合MTPA和弱磁控制(FW)实现基速附近的无冲击过渡。在过渡区采用加权融合电流给定方法,使电流超调<5%、转速波动<2%,全速域效率>90%。文章详细介绍了系统架构、核心算法及Simulink建模步骤,包括融合控制器设计、切换逻辑实现和参数优化。仿真结果表明,该方法相比传统硬切换显著改善了动态性能,并扩展了调速范围。同时提供了可直接复用的工程模板和MATLAB代码,为电机控制工程师提供了实用的全速域控制解决方案。

MHD0815的博客 81

echart甘特图更换背景色

原图区域背景为白色 背景透明

weixin_42957671的博客 1064

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

EChart 制作类似微软的 甘特图

前段时间  领导要求完成一个项目进度的图形,一个项目下面又分成不同的阶段,各阶段又不是固定死的,都是动态生成的,关键是还必须要显示时间进度,在一个只有x,y轴的坐标系中要显示,阶段类型,时间,还有各阶段完成量,还有计划和实际的进度,这个在一个二维的平面上很难完成的,最开始打算使用线图来完成,x轴为时间,y轴为计划量和实际量,各线的颜色代表各个阶段的类型,但是如果个阶段的量的单位不能统一,比如:第一

不死就继续 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ECharts图表组件之关系图

&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Test&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="main" style=&quo

zhangwenwu2的博客 2845

Echart甘特图实现效果 + 配带抽成方法 + 源码

一、常用属性特性 坐标轴反转 坐标轴轴间隙 坐标轴箭头 坐标轴名称 二、Echart-实例图 echart甘蔗图 因为echarts官网并没有提供类似甘蔗图这样的Demo实例,研究了相关的图表并做稍作处理之后,得到如下: 效果图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vBuseRmt-1575613186267)(http://q1kj0ulp2.bk...

runliu_vip的博客 3206

ZedGraphyphy常用属性

是一个非常优秀的开源的作图控件 ZedGraph来源:http://sourceforge.net/project/showfiles.php?group_id=114675 ZedGraph相关例子资源:http://zedgraph.org/wiki/index.php?title=Sample_Graphs 1、在vs中使用ZedGraph 2、 基本一些概念 几个注意点: 图片的保存路径设置:RenderedImagePath属性中设置,程序对该文件夹应该是有写和修改权限的 图片的输出格式:Outp

m0_38006057的博客 436

c#chart背景透明_C# 二

三十三、如何确定事件是否已订阅https://stackoverflow.com/questions/2697247/how-to-determine-if-an-event-is-already-subscribed​stackoverflow.com三二二、sealed密封类(防止继承)密封方法(防止重写)密封属性(防止重写)C#中sealed关键字 - Ring_1992 - 博客园​www...

weixin_42365401的博客 1548
上一篇: UIStackView教程 了解Stack View
下一篇: Cocos2d开发系列(二)
普通网友
博客等级 码龄8年 4粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值