zoukankan      html  css  js  c++  java
  • 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>
    
  • 相关阅读:
    mysql锁 实战测试代码
    Memcache教程 Memcache零基础教程
    Moneybookers API支付方式开发 步骤
    dede判断当前文章
    Windows下的Memcache安装 linux下的Memcache安装
    Ecshop:后台添加新功能栏目以及管理权限设置
    解决echsop兼容jquery(transport.js的冲突)的问题
    PHP AJAX JSONP实现跨域请求使用实例
    shell基础 -- 基本语法
    神器之strace
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152166.html
Copyright © 2011-2022 走看看