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

简介: Android开源SegmentedBarView(医学、生化、健康指标统计常用)在一些关于运动、健康、医学、生理、化学等Android应用开发中,往往遇到比较多的统计数据显示的代码处理,用图表直观的给出区间范围。


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);
	    }
}



运行结果如图所示:

相关文章
|
8月前
|
XML Android开发 数据安全/隐私保护
Android 自定义开源库 EasyView
Android 自定义开源库 EasyView
109 0
|
8月前
|
Java Linux API
统计android设备的网络数据使用量
统计android设备的网络数据使用量
186 0
|
5月前
|
监控 Java API
Android经典实战之OkDownload:一个经典强大的文件下载开源库,支持断点续传
本文介绍的 OkDownload 是一个专为 Android 设计的开源下载框架,支持多线程下载、断点续传和任务队列管理等功能,具备可靠性、灵活性和高性能特点。它提供了多种配置选项和监听器,便于开发者集成和扩展。尽管已多年未更新,但依然适用于大多数文件下载需求。
477 1
|
7月前
|
存储 API 开发工具
kotlin安卓开发,如何获取设备的唯一id, 有哪些开源库
在Kotlin的Android开发中,获取设备唯一ID的方法包括不稳定的ANDROID_ID、需要权限的IMEI、使用UUID与SharedPreference结合,以及考虑隐私的Firebase Installations ID和Advertising ID。由于隐私问题和Google Play政策,IMEI和ANDROID_ID不推荐作为长期唯一标识。推荐使用UUID(首次安装时生成并存储),或在涉及广告时使用Advertising ID(需用户同意),而Firebase Installations ID则提供了一种合规的设备标识选项。在选择方法时,必须遵守隐私指南和政策。
|
8月前
|
数据挖掘 开发工具 Android开发
R语言对git安卓包分类统计、聚类、复杂网络可视化分析
R语言对git安卓包分类统计、聚类、复杂网络可视化分析
|
小程序 JavaScript API
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
247 0
|
Android开发
Android图片加载开源库对比
Android图片加载开源库对比
134 0
|
Java 测试技术 Android开发
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解(下)
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解
453 0
|
Web App开发 JavaScript Java
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解(上)
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解
540 0
|
存储 ARouter Java
Android开源系列-组件化框架Arouter-(三)APT技术详解
最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter

热门文章

最新文章