当前位置:   article > 正文

android自定义带动画的柱状图控件_android柱状图增加动画

android柱状图增加动画

1.也是突然的想法,写了个柱状图,然后觉得静态的太死板又加上去了动画和点击事件.

2.下面开始上菜!各位道友觉得不好呢,就多给点批评建议,然后都给点个赞,哈哈~(原创作品,转载请标明)

(上传图片竟然不能超过2M,,,,,,,,,,,,本来做了个gif,一看9M多.....重新做了一个,,,就录了上方的一半将就看吧)

3.思路:一般自定义控件都要继承View或者一个控件,然后重写它的ondraw方法,在这个方法里面使用canvas各种浪.

4.柱状图控件代码,直接上了(细节思路,中途遇到的问题,存在的缺陷,心得等都在下面哦):

package com.jeska.testrecyclerview.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
/**
 * Created by jeska on 2016/8/12.
 */
public class ZhuZhuangTu extends View {
    private Thread mThread;
    /**标题*/
    private String title = "柱状图";
    /***/
    private Paint mPaint;
    private String emptyWarning = "没有数据";
    private Context mContext;
    private ArrayList<HashMap<String,String>> mDataList;
    private ArrayList<HashMap<String,Float>> mLocationList;
    private int[] colors;
    /**整个空间的宽度*/
    private int width;
    /**整个空间的高度*/
    private int height;
    /**箭头宽度*/
    private int arrowWidth = 10;
    /**坐标原点距离边界*/
    private int distance = 30;
    /**底部辅助横线条数*/
    private int horizontalLineCount = 10;
    /**柱形图的宽度*/
    private float ZhuZhuangTuWidth;
    /**水平线间隔*/
    private float horizontalLineInterval;
    /**柱状图间隔*/
    private float ZhuZhuangTuInterval;
    private Random mRandom;
    /**用来做动画的可变值*/
//    private float delta;
    /**用来做动画的线程while的flag*/
    private boolean run = true;
    /**动画时长*/
    private int millions = 6000;
    /**回调*/
    private OnZhuZhuangTuClickListener mListener;
    /**设备密度*/
    private float density;
    /**存放所有的delta*/
    private float[] deltas;
    /**最大值出现的位置*/
    private int maxValuePosition;
    public ZhuZhuangTu(Context context) {
        super(context);
        init(context);
    }

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

    public ZhuZhuangTu(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        this.mContext = context;
        mPaint = new Paint();
        mLocationList = new ArrayList<>();
        run = true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        setWillNotDraw(false);
        if (isDataMapEmpty()){
            canvas.drawColor(Color.GRAY);
            mPaint.setColor(Color.MAGENTA);
            mPaint.setTextSize(40f);
            canvas.drawText(emptyWarning, width / 2 - mPaint.getTextSize()*emptyWarning.length()/2, height / 2-mPaint.getTextSize()/2, mPaint);
        }else{
            mPaint.setColor(Color.BLACK);
            mPaint.setStrokeWidth(4);
            //绘制x轴
            canvas.drawLine(distance * density, height - distance * density, width - distance * density, height - distance * density, mPaint);
            //绘制x轴箭头
            canvas.drawLine(width - distance * density-arrowWidth * density, height - distance * density-arrowWidth * density, width - distance * density, height - distance * density, mPaint);
            canvas.drawLine(width - distance * density - arrowWidth * density, height - distance * density + arrowWidth * density, width - distance * density, height - distance * density, mPaint);
            //绘制y轴
            canvas.drawLine(distance * density, distance * density, distance * density, height - distance * density, mPaint);
            //绘制y轴箭头
            canvas.drawLine(distance * density - arrowWidth * density, distance * density + arrowWidth * density, distance * density, distance * density, mPaint);
            canvas.drawLine(distance * density + arrowWidth * density, distance * density + arrowWidth * density, distance * density, distance * density, mPaint)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/254648
推荐阅读
相关标签
  

闽ICP备14008679号