28 自定义View画坐标和柱状图
- 自定义View类 
 RectView.java
package com.qf.sxy.day29_customview.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
/**
 * Created by sxy on 2016/9/29.
 */
public class RectView extends View {
    private Paint mPaint;
    //设置条形图的 间距和宽度
    private int rectSpace = 50;
    private int rectWith = 50;
//必须是所有的柱状图高度的最大公约数以下的约数 否则余数高度无法画出
    private int times = 50;//设置走多少次
    private int current = 0;//当前走的次数
    //数据   条状态图的高度  颜色
    private int[][]rectArray ={{500,Color.YELLOW},{200,Color.RED},{350,Color.BLACK},{250,Color.GREEN}};
    public RectView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //初始化画笔对象
        initPaint();
    }
    private void initPaint() {
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.BLACK);
        mPaint.setStrokeWidth(3);
    }
    public RectView(Context context) {
        this(context,null);
    }
    /**
     * 绘制  条形统计图
     * @param canvas
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //画坐标点
        canvas.drawCircle(50,getHeight()-50,2,mPaint);
        //画x轴
        canvas.drawLine(50,getHeight()-50,getWidth()-50,getHeight()-50,mPaint);
        //画Y轴
        canvas.drawLine(50,getHeight()-50,50,50,mPaint);
        //画Y轴箭头
        canvas.drawLine(50,50,25,75,mPaint);
        canvas.drawLine(50,50,75,75,mPaint);
        //绘制条形图   n 条
        for(int i=0;i<rectArray.length;i++){
            //条形图 左边
            int left = rectSpace +(rectSpace+rectWith)*i;
            //获取顶部位置
            int top = rectArray[i][0]/times*current;
            //重新设置颜色
            mPaint.setColor(rectArray[i][1]);
            //绘制条形图
            canvas.drawRect(left+50,getHeight()-top-50,left+50+rectWith,getHeight()-50,mPaint);
        }
//        效果让其柱状图慢慢上升
        current++;
        if(current<times){
            invalidate();//刷新
        }
    }
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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.qf.sxy.day29_customview.MainActivity">
    <com.qf.sxy.day29_customview.widget.RectView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />
</RelativeLayout>
28 自定义View画坐标和柱状图的更多相关文章
- Android自定义View 画弧形,文字,并增加动画效果
		一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类 B ... 
- 28自定义View 模仿联系人字母侧栏
		自定义View LetterView.java package com.qf.sxy.customview02; import android.content.Context; import andr ... 
- Android 自定义View 画圆 画线
		自定义一个DrawCircle继承View 实现构造方法: public DrawCircle(Context context) { super(context); this.mContext = c ... 
- 自定义view 画圆
		package com.exaple.day01rikao; import android.content.Context; import android.graphics.Canvas; impor ... 
- 28 自定义View流式布局
		流式布局每行的行高以本行中最高的元素作为高,如果一个元素放不下到一行时直接到第二行 FlowLayoutView package com.qf.sxy.customview05.widget; imp ... 
- 28 自定义View侧滑栏
		ScrollMenuView.java package com.qf.sxy.customview03.widget; import android.content.Context; import a ... 
- 自定义View画一条线
		#import "PublishContextView.h" @implementation PublishContextView -(void)drawRect:(CGRect) ... 
- 自定义View,随着手指运动的小球
		这个实例是自定的view的初步介绍,要设计的是一个随着手指运动的小球.原理是随时获取手指的坐标,然后在这个坐标上面实时改变自定义view的坐标.这个view仅仅是画了一个圆形而已. 自定义的view ... 
- 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能
		前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ... 
随机推荐
- 二 Djano模型层之模型字段选项
			字段选项 以下参数是全部字段类型都可用的,而且是可选的 null 如果为True,Django将在数据库中将空值存储为NULL.默认值为False 对于字符串字段,如果设置了null=True意味着& ... 
- gradlew在Travis CI没可执行权限 permission denied
			问题的来源 我给一个gradlew项目添加Travis CI的时候遇到一个问题,gradlew没有可执行权限.具体错误如下: /home/travis/build.sh: line 45: ./gra ... 
- js switch判断 三目运算 while 及 属性操作
			三 目运算:如var a = 10: var b= 12: c = a>b ?a:b; 若成立执行a否则执行b var isHide = true; 若用if判断语句如下 if(isHide) ... 
- 持久化 XSS:ServiceWorkers 利用
			来源:http://www.mottoin.com/95058.html 来源:https://www.owasp.org/images/3/35/2017-04-20-JSONPXSS.pdf Se ... 
- NIO-学习
			通道(Channel) 通道表示打开到 IO 设备(例如:文件.套接字)的连接.若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区.然后操作缓冲区,对数据进行处理.C ... 
- 计蒜客NOIP模拟赛4 D2T1 鬼脚图
			鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合. 下图就是一张鬼脚图,其包含若干条竖线和若干条横线.请注意,横线只能水平连接相邻的两条竖线, ... 
- bzoj 3214: [Zjoi2013]丽洁体
			Description 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿 写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做 ... 
- 洛谷P2572 [SCOI2010]序列操作
			线段树 pushdown写的很浪~ #include<cstdio> #include<cstdlib> #include<algorithm> #include& ... 
- ●BZOJ 1531 [POI2005]Bank notes
			题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1531 题解: 单调队列优化多重背包DP (弱弱的我今天总算是把这个坑给填了...) 令V[i ... 
- RabbitMQ-Spring AMQP
			上篇文章RabbitMQ基础入门学习了rabbitMQ一些基础的api,当然spring也在原生代码的基础上做了更多的封装,这篇文章就基于spring-rabbit,学习一下spring的实现. p. ... 
