Android 自定义统计趋势图

                                                                                         自定义view统计趋势图效果

公司需求要做一个记步的统计图表,在网上找了很多例子没有发现这样的效果,用了MPchart 功能强大,可我不是很会用效果不理想,所有就有了这个博客,

这是最终实现效果,

废话不多说直接上代码,,这是自定义view




package com.ormdb.ondraw;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.AttributeSet;
import android.view.View;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class myView extends View {

    public myView(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    private int y = 720;
    private int distance = 140;
    private int heigth = 1000;

    private int[] day = {8, 7, 6, 2, 5, 6, 2};


    @Override

    protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);
        Path path = new Path();

        path.lineTo(50, 1000);

        path.lineTo(50, day[0]*75+100);

        path.lineTo(120, day[0]*75+100);
        int weigth = 120;
        for (int i = 1; i < day.length; i++) {
            weigth = weigth + 140;
            path.lineTo(weigth, day[i] * 75 + 100);
        }
        path.lineTo(1030, day[6]*75+100);

        path.lineTo(1030, 1000);
        path.lineTo(50, 1000);
        path.close();

        Paint mField = new Paint();

        mField.setAntiAlias(true);

        mField.setARGB(200, 255, 215, 5);//设置封闭路径的填充色为金***

        canvas.drawPath(path, mField);

        Paint paint = new Paint();

        paint.setAntiAlias(true);

        paint.setColor(Color.parseColor("#ffffff"));

        paint.setStrokeWidth(4);

        int temp  =140;
        canvas.drawLine(138+50,heigth,138+50,200,paint);
        for (int i = 2; i < 7; i++) {
            canvas.drawLine(temp*i+50,heigth,temp*i+50,200,paint);
        }

        Path path1 = new Path();
        path1.lineTo(614,1000);
        path1.lineTo(614,100+(day[3]+day[4])/2*75+36);
        path1.lineTo(676,100+day[4]*75-2);
        path1.lineTo(746,100+(day[4]+day[5])/2*75+36);
        path1.lineTo(746,1000);
        path1.lineTo(614,1000);
        path1.close();
        Paint mField1 = new Paint();

        mField1.setAntiAlias(true);

        mField1.setColor(Color.parseColor("#dc4935"));

        canvas.drawPath(path1, mField1);
    }

}


这是清单文件


<?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:gravity="center">

    <com.ormdb.ondraw.myView
        android:background="#ffffff"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

代码比较简单,还请大神多多指导,本人第一次写博客,轻喷,



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Android提供的Canvas和Paint类来绘制空心扇形统计图。具体步骤如下: 1. 创建一个继承自View的自定义View,重写onDraw方法。 2. 在onDraw方法中创建一个Paint对象,设置画笔的颜色和样式,如: ``` Paint paint = new Paint(); paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); ``` 3. 使用Canvas的drawArc方法来绘制扇形,需要传入扇形的矩形区域、起始角度和扫过的角度。如: ``` RectF rectF = new RectF(100, 100, 500, 500); canvas.drawArc(rectF, 0, 90, false, paint); ``` 其中,RectF对象用于指定扇形的位置和大小,前两个参数是左上角的坐标,后两个参数是右下角的坐标。第三个参数是起始角度,第四个参数是扫过的角度,第五个参数指定是否连接中心点。 4. 如果要绘制多个扇形,可以根据数据计算每个扇形的起始角度和扫过的角度。如: ``` float[] data = {30, 40, 50, 60}; float sum = 0; for (float value : data) { sum += value; } float startAngle = 0; for (float value : data) { float sweepAngle = value / sum * 360; canvas.drawArc(rectF, startAngle, sweepAngle, false, paint); startAngle += sweepAngle; } ``` 其中,data数组保存了每个扇形的数值,sum是所有数值的和,startAngle表示当前扇形的起始角度,sweepAngle表示当前扇形扫过的角度。 5. 最后,在布局文件中将自定义View添加到布局中即可。 以上是绘制空心扇形统计图的基本步骤,具体细节可以根据需要进行调整。 ### 回答2: 要实现Android自定义空心扇形统计图,你可以使用自定义View来绘制扇形和文字。 首先,创建一个继承自View的自定义View类,命名为PieChartView。在该类的构造方法中,初始化画笔和相关属性,如颜色、宽度等。 接下来,在PieChartView的onMeasure方法中确定View的大小,这取决于父容器给出的测量要求。 在PieChartView的onDraw方法中,使用Canvas和Paint来绘制扇形和文字。根据给定的数据,计算出每个扇形所占的角度,然后根据角度和颜色依次绘制扇形。 为了实现空心效果,你可以使用Canvas的drawArc方法来绘制空心扇形,设置Paint的Style为STROKE,并设置边框的宽度。这样,只会绘制扇形的边框而不会填充颜色。 接着,在绘制扇形时,你可以通过设置一个起始角度来绘制每个扇形,使它们按顺时针或逆时针排列。绘制文字时,可以根据扇形的中心角度和半径来确定文字的位置。 最后,你需要在使用PieChartView的Activity或Fragment中设置相关数据,如每个扇形的角度和颜色。然后将PieChartView添加到布局中。 通过这些步骤,你就能够实现一个简单的Android自定义空心扇形统计图。当然,你还可以进一步定制化,添加动画效果或触摸交互等功能,使统计图更加生动和实用。 ### 回答3: Android自定义空心扇形统计图可以通过继承View类,重写onDraw方法来实现。具体步骤如下: 1. 在XML布局文件中,声明一个自定义View的容器,如LinearLayout或RelativeLayout。 2. 在Java代码中,创建一个继承自View的类,重写onDraw方法。 3. 在onDraw方法中,先通过Canvas对象绘制一个圆形。 4. 再通过Path对象绘制一个扇形,可以通过Path.addArc方法来实现。 5. 设置扇形的起始角度和扇形的角度大小,可以根据所需的数据来计算。 6. 设置扇形的颜色,可以通过Paint对象的setColor方法来设置。 7. 设置扇形的样式为空心,可以通过Paint对象的setStyle方法来设置。 8. 设置扇形的边框宽度和颜色,可以通过Paint对象的setStrokeWidth和setColor方法来设置。 9. 最后调用Canvas对象的drawPath方法来绘制扇形。 10. 在主Activity中,实例化自定义View类的对象,并将其添加到容器中。 通过以上步骤,就可以实现一个自定义的空心扇形统计图。可以根据需要来设置扇形的起始角度、角度大小、颜色和边框样式等属性,以达到所需的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值