Android开源SegmentedBarView(医学、生化、健康指标统计常用)

本文介绍如何使用Android开源的SegmentedBarView组件来展示医学、生化、健康指标的统计数据,提供了组件的XML布局示例和Java代码实现,包括创建布局、设置段落数据、显示描述文本、动态改变数值等功能。

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



Android开源SegmentedBarView(医学、生化、健康指标统计常用)

在一些关于运动、健康、医学、生理、化学等Android应用开发中,往往遇到比较多的统计数据显示的代码处理,用图表直观的给出区间范围。Android SegmentedBarView实现的就是上述设计需求,Android SegmentedBarView做出的效果如图所示:


SegmentedBarView在github上的项目主页:https://github.com/gspd-mobi/SegmentedBarView
SegmentedBarView可以在xml布局文件中写,也可以用Java代码动态生成创建出来,现在给出一个例子,首先写一个布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="zhangphil.demo.MainActivity" >

    <mobi.gspd.segmentedbarview.SegmentedBarView
        android:id="@+id/bar_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="20dp"
        app:sbv_empty_segment_text="No segments"
        app:sbv_segment_gap_width="10dp"
        app:sbv_segment_text_size="20sp"
        app:sbv_show_description_text="true"
        app:sbv_side_style="angle"
        app:sbv_side_text_style="twoSided"
        app:sbv_value_sign_height="30dp"
        app:sbv_value_sign_round="8dp"
        app:sbv_value_sign_width="30dp" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>


Java代码:

package zhangphil.demo;

import java.util.ArrayList;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import mobi.gspd.segmentedbarview.Segment;
import mobi.gspd.segmentedbarview.SegmentedBarView;
import mobi.gspd.segmentedbarview.SegmentedBarViewSideStyle;

public class MainActivity extends Activity {

	private LinearLayout mLinearLayout;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout);

		// 从XML布局文件添加SegmentedBarView
		final SegmentedBarView barView = (SegmentedBarView) findViewById(R.id.bar_view);
		final ArrayList<Segment> segments = new ArrayList<>();
		// 20-50区间
		segments.add(new Segment(20, 50, "正常", Color.BLUE));
		// 50-60区间
		segments.add(new Segment(50, 60, "糟糕", Color.LTGRAY));
		// 初始化数据指向30
		barView.setValue(30f);
		barView.setSegments(segments);
		barView.setShowDescriptionText(true);

		findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				barView.setValue(55f);
			}
		});

		// Java代码动态生成标准的SegmentedBarView
		createNormalBarView();
		
		createNormalBarView2();
		
		//Java代码动态创建几个没有数值的Segment
		createBarViewWithoutNumericValue();
	}

	private void createNormalBarView() {
		SegmentedBarView barView = new SegmentedBarView(this);
		ArrayList<Segment> segments = new ArrayList<>();
		Segment segment = new Segment(0, 4.5f, "低", Color.parseColor("#EF3D2F"));
		segments.add(segment);
		Segment segment2 = new Segment(4.5f, 6.5f, "中", Color.parseColor("#8CC63E"));
		segments.add(segment2);
		Segment segment3 = new Segment(6.5f, 20f, "高", Color.parseColor("#EF3D2F"));
		segments.add(segment3);

		barView.setValueWithUnit(4.96f, "米");

		barView.setSegments(segments);
		barView.setShowDescriptionText(true);

		barView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
				LinearLayout.LayoutParams.WRAP_CONTENT));
		barView.setPadding(10, 10, 10, 10);

		mLinearLayout.addView(barView);
	}
	
	private void createBarViewWithoutNumericValue() {
        ArrayList<Segment> segments = new ArrayList<>();
        Segment segment = new Segment("低", null, Color.parseColor("#EF3D2F"));
        segments.add(segment);
        Segment segment2 = new Segment("中", null, Color.parseColor("#8CC63E"));
        segments.add(segment2);
        Segment segment3 = new Segment("高", null, Color.parseColor("#EF3D2F"));
        segments.add(segment3);
        SegmentedBarView barView = SegmentedBarView.builder(this)
                .segments(segments)
                //此处的value指向Segment的下标2则指向第二个Segment
                .valueSegment(2)
                .valueSegmentText("你的值")
                //.unit("厘米")
                .sideStyle(SegmentedBarViewSideStyle.ANGLE)
                .build();
        barView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        barView.setPadding(10, 10, 10, 10);

        mLinearLayout.addView(barView);
    }
	
	
	 private void createNormalBarView2() {
	        SegmentedBarView barView = new SegmentedBarView(this);
	        ArrayList<Segment> segments = new ArrayList<>();
	        Segment segment = new Segment(0, 4.5f, "低", Color.parseColor("#EF3D2F"));
	        segments.add(segment);
	        Segment segment2 = new Segment(4.5f, 6.5f, "正常", Color.parseColor("#8CC63E"));
	        segments.add(segment2);
	        Segment segment3 = new Segment(6.5f, 20f, "高", Color.parseColor("#EF3D2F"));
	        segments.add(segment3);
	        barView.setValueWithUnit(4.96f, "cm");
	        barView.setSegments(segments);
	        barView.setShowDescriptionText(true);
	        
	        //设置 SegmentedBarView高度
	        barView.setBarHeight(90);
	        
	        //提示气泡的背景颜色
	        barView.setValueSignColor(Color.RED);
	        
	        //设置提示气泡的宽高
	        barView.setValueSignSize(300, 100);
	        
	        barView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
	        barView.setPadding(10, 10, 10, 10);
	        mLinearLayout.addView(barView);
	    }
}



运行结果如图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhangphil

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

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

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

打赏作者

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

抵扣说明:

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

余额充值