I want to draw a clean dynamic view as shown below.

I have two arraylist
List<String> type and List<Float> level;
the type has a name (max, type1, type2, etc.) and the level has the value of a type marker
the level will always be between 0 and 1, and the type will be a string, the level value and will come from the server. We have two fixed tags - min and max.
Suppose I got .4 for min and .5 for max from the server, then all type (type1, type2, type3, etc.) will be between .4 and .5. Then all other types should be arranged as a curved line, but if we get the value min, equal to .001 and max.9, then we have enough space to show the rest of the labels, in this case we do not need to show along the curved line or marker . But I do not know how to achieve this or where I can start. Any help would be really appreciated. Thanks in advance to everyone.
If the above design is a bit complicated, then please give me a link or link to achieve the below design. 
It would be great if I could make it easier (above the image).
I tried to make the code below in the onCreate () block.
ViewTreeObserver viewTreeObserver = viewbar.getViewTreeObserver(); if (viewTreeObserver.isAlive()) { viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint({ "NewApi", "ResourceAsColor" }) @Override public void onGlobalLayout() { viewbar.getViewTreeObserver().removeOnGlobalLayoutListener(this); viewWidth = viewbar.getWidth(); viewHeight = viewbar.getHeight(); DefineType definetype = new DefineType(); float maxvalue = Collections.max(definetype.frameCalLevels); float minvalue = Collections.min(definetype.frameCalLevels); min.setText(definetype.frameCalType.get(0).toString()); max.setText(definetype.frameCalType.get(4).toString()); float density = getApplicationContext().getResources().getDisplayMetrics().density; int[] posXY = new int[2]; viewbar.getLocationOnScreen(posXY); int x = posXY[0]; int y = posXY[1]; DrawView drawView; drawView = new DrawView(MainActivity.this, x, y,density);
and my inner class for viewing looks below
class DrawView extends View { Paint paint = new Paint(); float mx, my, mdensity; Paint mBGPaint, mTXTPaint,mLINEPaint,mBRDPaint; public DrawView(Context context, float x, float y, float density) { super(context); paint.setColor(Color.RED); paint.setStrokeWidth(8); paint.setStyle(Paint.Style.STROKE); mx = x; my = y; mdensity = density; } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); init(); mLINEPaint.setStrokeWidth(8);
My XML design is below
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/ll"> <View android:id="@+id/view" android:layout_width="70dp" android:layout_height="300dp" android:layout_marginTop="40dp" android:layout_marginLeft="10dp" android:orientation="vertical" android:background="@drawable/rect" > </View> </LinearLayout>
In the above code, I get below the screen, so it doesn't fit. What am I missing here? Please suggest me how to move our box? 