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);
}
}
运行结果如图所示: