• 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>
    
  • 相关阅读:
    CodeDOM浅析(上)
    这段代码居然运行正常
    CodeDOM浅析(下)
    动态生成与编译(七)根据CodeDOM生成源代码
    动态生成与编译(九)CodeDOM的局限
    动态生成与编译(八)动态编译
    新年送大礼
    祝所有的女性朋友们节日快乐!
    预测人民币在2006年最终的收盘价
    2007年春节,祝朋友们:身体健康,万事如意! 度过一个愉快春节!
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152166.html
Copyright © 2020-2023  润新知