版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android如何实现带动画柱状图
/upload/information/20200623/125/126985.jpg/upload/information/20200623/125/126986.gifpackage
com.lixiaodaoaaa.view.pieview;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Paint;
import
android.graphics.RectF;
import
android.support.annotation.Nullable;
import
android.util.AttributeSet;
import
android.view.View;
import
com.gcssloop.graphics.R;
import
com.lixiaodaoaaa.uitls.DensityUtils;
/**************************************
*
***
/lixiaodaoaaa
**
*
***
create
at
2017/5/18
23:45
****
*
*******
by:lixiaodaoaaa
**********
**************************************/
public
class
PColumn
extends
View
{
int
MAX
=
100;//最大
int
corner
=
40;
int
data
=
0;//显示的数
int
tempData
=
0;
int
textPadding
=
20;
Paint
mPaint;
int
mColor;
Context
mContext;
public
PColumn(Context
context)
{
super(context);
mContext
=
context;
}
public
PColumn(Context
context,
@Nullable
AttributeSet
attrs)
{
super(context,
attrs);
mContext
=
context;
initPaint();
}
public
PColumn(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.colorPrimary);
mPaint.setColor(mColor);
}
@Override
public
void
draw(Canvas
canvas)
{
super.draw(canvas);
if
(data
==
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
=
data
/
100
+
1;
if
(tempData
<
data
-
step)
{
tempData
=
tempData
+
step;
}
else
{
tempData
=
data;
}
//画圆角矩形
String
S
=
tempData
+
"";
//一个字和两,三个字的字号相同
if
(S.length()
<
4)
{
mPaint.setTextSize(getWidth()
/
2);
}
else
{
mPaint.setTextSize(getWidth()
/
(S.length()
-
1));
}
float
textH
=
mPaint.ascent()
+
mPaint.descent();
float
MaxH
=
getHeight()
-
textH
-
2
*
DensityUtils.pxTodip(mContext,
textPadding);
//圆角矩形的实际高度
float
realH
=
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(int
data,
int
MAX)
{
this.data
=
data;
tempData
=
0;
this.MAX
=
MAX;
postInvalidate();
}
}/*
*
Copyright
2016
GcsSloop
*
*
Licensed
under
the
Apache
License,
Version
2.0
(the
"License");
*
you
may
not
use
this
file
except
in
compliance
with
the
License.
*
You
may
obtain
a
copy
of
the
License
at
*
*
/licenses/LICENSE-2.0
*
*
Unless
required
by
applicable
law
or
agreed
to
in
writing,
software
*
distributed
under
the
License
is
distributed
on
an
"AS
IS"
BASIS,
*
WITHOUT
WARRANTIES
OR
CONDITIONS
OF
ANY
KIND,
either
express
or
implied.
*
See
the
License
for
the
specific
language
governing
permissions
and
*
limitations
under
the
License.
*
*
Last
modified
2016-10-02
00:22:33
*
*/
package
com.lixiaodaoaaa.graphics;
import
android.os.Bundle;
import
android.support.v7.app.AppCompatActivity;
import
com.gcssloop.graphics.R;
import
com.lixiaodaoaaa.view.pieview.PColumn;
public
class
MainActivity
extends
AppCompatActivity
{
private
PColumn
column_one;
private
PColumn
column_two;
private
PColumn
column_three;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initAllViews();
}
private
void
initAllViews()
{
column_one
=
(PColumn)
findViewById(R.id.column_one);
column_two
=
(PColumn)
findViewById(R.id.column_two);
column_three
=
(PColumn)
findViewById(R.id.column_three);
column_one.setData(0,
100);
column_two.setData(30,
100);
column_three.setData(40,
100);
}
}<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.lixiaodaoaaa.graphics.MainActivity"
>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"/>
<com.lixiaodaoaaa.view.pieview.PColumn
android:id="@+id/column_one"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_wei
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械通气临床故障处理总结2026
- 道路安全培训知识
- 2026年甘肃省武威市高职单招数学试题及答案
- 道路交通安全及事故课件
- 2026年度执业药师继续教育公需科目考试题库(含答案)
- 2026年甘肃省陇南市高职单招英语试题解析及答案
- 2025小动物视觉电生理数据采集操作规范指南(2025)课件
- 中考语文文言文对比阅读(全国)15《记承天寺夜游》对比阅读16组80题(原卷版)
- 边坡坍塌安全教育培训课件
- 施工现场安全检查计划安排表
- 2026年广东农垦火星农场有限公司公开招聘作业区管理人员备考题库及参考答案详解
- 肿瘤化疗导致的中性粒细胞减少诊治中国专家共识解读
- 2025年查对制度考核考试题库(答案+解析)
- 云南省2025年普通高中学业水平合格性考试历史试题
- 养老护理服务的法律监管与执法
- 四川省2025年高职单招职业技能综合测试(中职类)汽车类试卷(含答案解析)
- 隧道施工清包合同(3篇)
- 消化系统肿瘤多学科协作(MDT)诊疗方案
- 围手术期疼痛的动物模型与转化研究
- 安泰科技招聘笔试题库2025
- 燃机三菱控制系统简述课件
评论
0/150
提交评论