Android 自定义View画天气预报折线图

本文介绍如何在Android中自定义View来绘制天气预报的折线图。由于第三方框架无法满足特定需求,如处理负数度数和不需要额外交互效果,作者选择直接使用自定义View实现。关键思路是将折线图拆分为多个四边形,并通过扩展边界和调整边距来创建图表。文中提供了相关的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图如下:
这里写图片描述

刚开始尝试用第三方画曲线的框架来画效果图,后来发现曲线间的阴影当有负数的度数的时候画不出来,而且不需要点击放大、点点可点的效果,用框架显得很臃肿,所以最后用自定义View来画的折线图。自定义画折线图的大致思路:这个图是有多个四边形组成的(4个点连接起来就是一个四边形),两边延伸:添加四个多余的点,将左右的边距设置成负数即可。

代码如下:

public class WeatherChartView extends View {
   

    /**
     * x轴集合
     */
    private float mXAxis[] ;

    /**
     * 白天y轴集合
     */
    private float mYAxisDay[] ;

    /**
     * 夜间y轴集合
     */
    private float mYAxisNight[] ;

    /**
     * x,y轴集合数
     */
    private int LENGTH ;

    /**
     * 白天温度集合
     */
    private int mTempDay[] ;

    /**
     * 夜间温度集合
     */
    private int mTempNight[] ;

    /**
     * 控件高
     */
    private int mHeight;

    /**
     * 字体大小
     */
    private float mTextSize;

    /**
     * 圓半径
     */
    private float mRadius ;

    /**
     * 圓半径今天
     */
    private float mRadiusToday ;

    /**
     * 文字移动位置距离
     */
    private float mTextSpace ;

    /**
     * 线的大小
     */
    private float mStokeWidth ;

    /**
     * 白天折线颜色
     */
    private int mColorDay = Color.parseColor("#ffffff");

    /**
     * 夜间折线颜色
     */
    private int mColorNight = Color.parseColor("#ffffff");;

    /**
     * 字体颜色
     */
    private int mTextColor = Color.parseColor("#ffffff");;

    /**
     * 屏幕密度
     */
    private float mDensity;

    /**
     * 控件边的空白空间
     */
    private float mSpace;

    @SuppressWarnings("deprecation")
    public WeatherChartView(Context context, AttributeSet attrs) {
        super(context, attrs); 
        mDensity = getResources().getDisplayMetrics().density;
        mRadius = 3 * mDensity;
        mRadiusToday = 3 * mDensity;
        //mSpace = 3 * mDensity;
        mTextSpace = 10 * mDensity;
  
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值