付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么通过自定义view实现动态柱状图
这篇文章将为大家详细讲解有关Android中怎么通过自定义view实现动态柱状图,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。自定义viewpublic
class
Histogram
extends
View
{
int
MAX
=
100;//矩形显示的最大值
int
corner
=
0;
//矩形的角度。
设置为0
则没有角度。
double
data
=
0.0;//显示的数
double
tempData
=
0;
//初始数据
int
textPadding
=
50;
//字体与矩形图的距离
Paint
mPaint;
int
mColor;
Context
mContext;
//构造函数
public
Histogram(Context
context)
{
super(context);
mContext
=
context;
}
public
Histogram(Context
context,
@Nullable
AttributeSet
attrs)
{
super(context,
attrs);
mContext
=
context;
initPaint();
}
public
Histogram(Context
context,
@Nullable
AttributeSet
attrs,
int
defStyleAttr)
{
super(context,
attrs,
defStyleAttr);
mContext
=
context;
initPaint();
}
//画笔方法
private
void
initPaint()
{
mPaint
=
new
Paint();
mPaint.setAntiAlias(true);
mColor
=
mContext.getResources().getColor(R.color.gary);
mPaint.setColor(mColor);
}
@Override
public
void
draw(Canvas
canvas)
{
super.draw(canvas);
if
(data
==
0.0)
{
mPaint.setTextSize(getWidth()
/
2);
RectF
oval3
=
new
RectF(0,
getHeight()
-
DensityUtils.pxTodip(mContext,
20),
getWidth(),
getHeight());//
设置个新的长方形
canvas.drawRoundRect(oval3,
DensityUtils.pxTodip(mContext,
corner),
DensityUtils.pxTodip(mContext,
corner),
mPaint);
canvas.drawText("0",
getWidth()
*
0.5f
-
mPaint.measureText("0")
*
0.5f,
getHeight()
-
DensityUtils.pxTodip(mContext,
20)
-
2
*
DensityUtils.pxTodip(mContext,
textPadding),
mPaint);
return;
}
//防止数值很大的的时候,动画时间过长
int
step
=
(int)
(data
/
100
+
1.0);
if
(tempData
<
data
-
step)
{
tempData
=
tempData
+
step;
}
else
{
tempData
=
data;
}
//画圆角矩形
String
S
=
tempData
+
"";
//如果数字后面需要加%
则在""中添加%
//设置显示的字体
Typeface
typeface
=
Typeface.createFromAsset(getContext().getAssets(),"digital-7.ttf");
mPaint.setTypeface(typeface);
//
//一个字和两,三个字的字号相同
if
(S.length()
<
4)
{
mPaint.setTextSize(getWidth()/2
);
}
else
{
mPaint.setTextSize(50);
//可以通过getWidth()/2
改变字体大小
也可以通过设置数字来改变自己想要的字体大小
当超出矩形图宽度时不能显示全部
}
//
float
textH
=
mPaint.ascent()
+
mPaint.descent();
float
MaxH
=
getHeight()
-
textH
-
2
*
DensityUtils.pxTodip(mContext,
textPadding);
//
//圆角矩形的实际高度
float
realH
=
(float)
(MaxH
/
MAX
*
tempData);
RectF
oval3
=
new
RectF(0,
getHeight()
-
realH,
getWidth(),
getHeight());//
设置个新的长方形
canvas.drawRoundRect(oval3,
DensityUtils.pxTodip(mContext,
corner),
DensityUtils.pxTodip(mContext,
corner),
mPaint);
//写数字
canvas.drawText(S,
getWidth()
*
0.5f
-
mPaint.measureText(S)
*
0.5f,
getHeight()
-
realH
-
2
*
DensityUtils.pxTodip(mContext,
textPadding),
mPaint);
if
(tempData
!=
data)
{
postInvalidate();
}
}
public
void
setData(double
data,
int
MAX)
{
this.data
=
data;
this.MAX
=
MAX;
postInvalidate();
}
public
int
getmColor()
{
return
mColor;
}
public
void
setmColor(int
mColor)
{
this.mColor
=
mColor;
}
}布局<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"/>
<com.mieasy.myhistogramview.Histogram
android:id="@+id/column_one"
android:layout_width="0dp"
android:layout_height="300dp"
android:layout_weight="0.8"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2.4"/>
<com.mieasy.myhistogramview.Histogram
android:id="@+id/column_two"
android:layout_width="0dp"
android:layout_height="300dp"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2.4"/>
<com.mieasy.myhistogramview.Histogram
android:id="@+id/column_three"
android:layout_width="0dp"
android:layout_height="300dp"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"/>
</LinearLayout>MainActivity调用initAllViews()方法
private
void
initAllViews()
{
column_one
=
(Histogram)
findViewById(R.id.column_one);
column_two
=
(Histogram)
findViewById(R.id.column_two);
column_three
=
(Histogram)
findViewById(R.id.column_three);
column_one.setData(
20.22,
100);
column_two.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高中语文《临安春雨初霁》陆游闲愁诗歌教案
- 2026年居功自傲成语故事谦逊品格教案
- 《鸟》阅读专项试题及答案解析
- 补语知识点试题与答案分享
- 国际法律事务处理顾问合同2026年版
- 有关流浪地球的考试题目及答案
- 射箭馆教练培训费用合同2026
- 照明灯饰企业产品研发合作协议
- 班主任知识试题及答案详解
- 2026年四川省部编版一年级语文第2课小猫钓鱼课后练习
- 2026年安全生产月:动火作业安全管理课件
- 2026贵州锦秀黔成服饰有限公司招聘42人笔试备考试题及答案详解
- 老挝万象市中餐业发展的机遇与挑战:市场、文化与策略的多维度剖析
- LY/T 1765-2025森林草原防火瞭望塔(台)火情瞭望规范
- 2026北京随军家属定向安置面试核心题库及踩分点答案
- 村(社区)干部考试试题及答案
- 中国制药工业EHS指南(2025版)-中国医药企业管理协会
- 2025年四川大学马克思主义基本原理概论期末考试笔试题库
- 张家港城市生活污水收集治理改造工程环境影响报告表
- 护理专业开学第一课主题
- 6.4.3 正弦定理(公开课)
评论
0/150
提交评论