Android 自定义柱状图及属性动画

本文介绍了在Android项目中遇到统计图需求,由于现有框架无法满足,作者选择自定义柱状图控件。文章重点讨论了自定义控件的实现,包括在`onSizeChanged`中初始化参数,`onDraw`方法中绘制柱状条,并利用属性动画实现动态效果。此外,还提供了属性动画在API 11以下版本的兼容方案。附带了源码和示例下载链接。
摘要由CSDN通过智能技术生成

前段时间公司项目中用到了统计图,网上找了些资料和框架都不能满足我的需求,没办法,只有自己写了。

近来清闲,将其抽出一个demo了,欢迎大家交流指正。

效果图先行

实现方案有两个,一是自定义控件,二是使用属性动画。属性动画在api11以上版本才有,在11版本以下使用可以引入nineoldandroids框架。

由于属性动画比较简单,这里主要说下自定义控件

自定义控件源码如下:

/**
 * 工程名: histogram
 * 文件名: HistogramView.java
 * 包名: com.style.histogram
 * 日期: 2014-4-21下午8:23:38
 * Copyright (c) 2014
 *
*/

package com.style.histogram;
 

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;

/**
 * 类名: HistogramView <br/>
 * 功能: 柱状图. <br/>
 * 日期: 2014-4-21 下午8:23:38 <br/>
 *
 * @author   msl
 * @version  	 
 */
public class HistogramView extends View implements Runnable{
	private static final String TAG = HistogramView.class.getSimpleName();
	
	private int comWidth; //控件宽度
	private int comHeight;//控件高度
	
	private View rateView;//进度条
	
	private View rateTopView; //进度条顶部View
	
	private String rateBackgroundColor;//进图条背景颜色
	
	private int rateBackgroundId; //进图条背景图片id
	
	private Bitmap rataBackgroundBitmap;
	
	private boolean isHasRateTopView; //进度条顶部View
	
	private int rateHeight; //进度条的高
	
	private int rateWidth; //进度条的宽
	
	private int rateAnimValue;//进度条动画高度
	
	private int orientation; //设置柱状图方向
	
	private double progress;//设置进度  1为最大值
	
	private boolean isAnim = true; //是否动画显示统计条
	
    private Handler handler = new Handler();//动画handler
	
	private int animRate = 1; //动画速度   以每1毫秒计
	
	private int animTime = 1;//动画延迟执行时间
	
	private Canvas canvas;//画布
	
	public HistogramView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle); 
	}

	public HistogramView(Context context, AttributeSet attrs) {
		super(context, attrs); 
	}

	public HistogramView(Context context) {
		super(context); 
	}
	

	 
	
	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
		super.onSizeChanged(w, h, oldw, oldh); 
		//初始化控件和进度的条相关参数
		comWidth = w;
		comHeight = h;
		if(orientation==Li
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值