安卓学习笔记---常见图表实现

目录

主界面,界面xml代码:

一.饼图:MybingtuView

二.柱状图代码:MyzhuxingView

三.折线图代码:MyZheXianTuView.java


主界面,界面xml代码:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.tb.MybingtuView
        android:layout_width="164dp"
        android:layout_height="152dp"
        android:layout_x="21dp"
        android:layout_y="129dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.example.tb.MyZheXianTuView
        android:layout_width="489dp"
        android:layout_height="293dp"
        android:layout_x="-10dp"
        android:layout_y="41dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.example.tb.MyzhuxingView
        android:layout_width="489dp"
        android:layout_height="293dp"
        android:layout_x="307dp"
        android:layout_y="86dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</AbsoluteLayout>

一.饼图:MybingtuView

package com.example.tb;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by FJFZ on 2022/11/20.
 */

public class MybingtuView extends View {
    public MybingtuView(Context context, AttributeSet atts) {
        super(context,atts);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int x=100,y=100,w=200,h=200;
        int r=w/2;

        float jd1=60,jd2=90,jd3=210; //定义角度

        //转化成弧度
        float hd1=(float)3.14 / 180 *jd1 /2;
        float hd2=(float)3.14 / 180 *(jd1+jd2 /2);
        float hd3=(float)3.14 / 180 *(jd1+jd2+jd3 /2);


        Paint paint=new Paint();
        RectF rect=new RectF(x,y,x+w,y+h);



        paint.setColor(Color.RED);
        //画圆弧
        canvas.drawArc(rect,0,jd1,true,paint);
        paint.setColor(Color.GRAY);
        //写角度
        canvas.drawText(jd1+"",(float)(x+r+Math.cos(hd1) * (r/4 *3 )),(float)(x+r+Math.sin(hd1) * (r/4 * 3) ),paint);



        paint.setColor(Color.BLACK);
        canvas.drawArc(rect,jd1,jd2,true,paint);
        paint.setColor(Color.GRAY);
        canvas.drawText(jd2+"",(float)(x+r+Math.cos(hd2) * (r/4 *3 )),(float)(x+r+Math.sin(hd2) * (r/4 * 3) ),paint);


        paint.setColor(Color.GREEN);
        canvas.drawArc(rect,jd1+jd2,jd3,true,paint);
        paint.setColor(Color.GRAY);
        canvas.drawText(jd3+"",(float)(x+r+Math.cos(hd3) * (r/4 *3 )),(float)(x+r+Math.sin(hd3) * (r/4 * 3) ),paint);









    }
}

二.柱状图代码:MyzhuxingView

package com.example.tb;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

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

/**
 * Created by FJFZ on 2022/11/20.
 */

public class MyzhuxingView extends View {
    public MyzhuxingView(Context context, AttributeSet atts) {
        super(context,atts);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint=new Paint();
        paint.setColor(Color.BLACK);
        paint.setTextSize(21);
        List<Float>list=new ArrayList<>();
        list.add(Float.parseFloat("100"));
        list.add(Float.parseFloat("200"));
        list.add(Float.parseFloat("300"));
        list.add(Float.parseFloat("400"));

        int x=500,y=500,w=600,h=400;
        canvas.drawLine(x,y,x+w,y,paint);
        canvas.drawLine(x,y,x,y-h,paint);
        canvas.drawLine(x+w-15,y+20,x+w,y,paint);
        canvas.drawLine(x+w-15,y-20,x+w,y,paint);
        canvas.drawLine(x+15,y-h+20,x,y-h,paint);
        canvas.drawLine(x-15,y-h+20,x,y-h,paint);



        int xw=w/6;
        for (int i=1;i<5;i++){
            canvas.drawLine(x+xw*i, y, x+xw*i, y-15, paint);
            canvas.drawText(i+"", x+xw*i -10, y+25, paint);
        }


        int yh=h/4;
        for ( int i=1;i<5;i++) {
            canvas.drawLine(x,y-yh*i-15,x,y-yh*i,paint);
            canvas.drawLine(x,y-yh*i,x+w,y-yh*i,paint);
            canvas.drawText(i+"",x-35,y-yh*i,paint);
        }



        paint.setColor(Color.RED);
        int zhuw=30;
        if (list.size() > 0) {
            for (int i=1;i<list.size()+1;i++) {
                canvas.drawRect(x+xw*i-zhuw/2,y-list.get(i-1),x+xw*i+zhuw/2,y,paint ); //画柱状
                canvas.drawText(list.get(i-1)+"" ,x+xw*i-zhuw/2,y-list.get(i-1)-5,paint);
            }
        }



    }
}

三.折线图代码:MyZheXianTuView.java

package com.example.tb;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

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

/**
 * Created by FJFZ on 2022/11/21.
 */

public class MyZheXianTuView extends View {
    public MyZheXianTuView(Context context, AttributeSet atts) {
        super(context,atts);
    }



    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int x=600,y=600,w=600,h=400,maxy=400;
        List<Float> list=new ArrayList<>();
        list.add(Float.parseFloat("100"));
        list.add(Float.parseFloat("200"));
        list.add(Float.parseFloat("300"));
        list.add(Float.parseFloat("400"));




        Paint paint=new Paint();
        paint.setColor(Color.RED);
        paint.setTextSize(21);
        canvas.drawLine(x,y,x+w,y,paint);//x轴
        canvas.drawLine(x,y,x,y-h,paint);//y轴
        canvas.drawLine(x+w-15,y+15,x+w,y,paint);
        canvas.drawLine(x+w-15,y-15,x+w,y,paint);
        canvas.drawLine(x+15,y-h+15,x,y-h,paint);
        canvas.drawLine(x-15,y-h+15,x,y-h,paint);

        int yh=h/4;
        for (int i=1;i<5;i++) {
            canvas.drawLine(x+15,y-yh*i,x,y-yh*i,paint);
            canvas.drawText(i+"",x+25,y-yh*i,paint);
        }
        
        int xw=w/list.size();
        for (int i=1;i<list.size()+1;i++) {
            canvas.drawLine(x+xw*i,y-15,x+xw*i,y,paint);
            canvas.drawText(list.get(list.size()-i)+"",x+xw*i,y-35,paint);
        }


        int p1;int p2;
        for (int i=1;i<list.size();i++) {
            p1=list.size()-i;
            p2 =list.size()-i-1;
            canvas.drawLine(x+xw*i,y-list.get(p1) /2,x+xw*(i+1),y-list.get(p2) /2 * (maxy /h) ,paint);
            canvas.drawText(list.get(p1) +"" ,x+xw*i,y-list.get(p1) /2 *(maxy /h),paint);
            canvas.drawText(list.get(p2)  +"",x+xw*(i+1),y-list.get(p2) /2 * (maxy/h),paint );
        }
        



    }
}


Developed by 福州机电工程职业技术学校 wh

邮箱联系方式:xiaohui032901@foxmail.com

qq联系方式:2151335401、3135144152

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温辉wh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值