如何在android studio中显示堆叠条形图/图表?
我必须创建一个堆栈条形图,我的要求是该图应该是这样的。 我检查了许多图形库,但没有人提供这种类型的UI。如何在android studio中显示堆叠条形图/图表?,android,graph,mpandroidchart,Android,Graph,Mpandroidchart,我必须创建一个堆栈条形图,我的要求是该图应该是这样的。 我检查了许多图形库,但没有人提供这种类型的UI。 这有可能实现吗 所以我终于找到了解决方法 步骤1:添加3个具有各自颜色的视图和一个按钮,如以下XML所示: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="
这有可能实现吗 所以我终于找到了解决方法 步骤1:添加3个具有各自颜色的视图和一个按钮,如以下XML所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<View
android:layout_width="75sp"
android:layout_height="15sp"
android:layout_marginTop="100sp"
android:layout_marginStart="10sp"
android:background="#ff0000"
android:id="@+id/viewOverdue"/>
<View
android:layout_width="75sp"
android:layout_height="15sp"
android:layout_marginTop="100sp"
android:layout_marginStart="2sp"
android:background="#FFDD00"
android:layout_toEndOf="@+id/viewOverdue"
android:id="@+id/viewActive"/>
<View
android:layout_width="75sp"
android:layout_height="15sp"
android:layout_marginTop="100sp"
android:layout_marginStart="2sp"
android:background="#00FF00"
android:layout_toEndOf="@+id/viewActive"
android:id="@+id/viewDone"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Enter Overdue"
android:id="@+id/editOverdue"
android:layout_below="@+id/viewActive"
android:layout_marginTop="100sp"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Enter Active"
android:layout_below="@+id/editOverdue"
android:id="@+id/editActive"
android:layout_marginTop="2sp"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Enter Done"
android:layout_below="@+id/editActive"
android:id="@+id/editDone"
android:layout_marginTop="2sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="submit"
android:id="@+id/btnSubmit"
android:layout_below="@id/editDone"
android:layout_marginTop="20sp"/>
</RelativeLayout>
这是执行后的输出:
因此,其工作原理是在edittext中键入任务数。无论您如何获得任务的数量,但您需要将其转换为stackBar总长度的百分比或任何您称之为的值。
因此,最后您只需根据编号为每个视图分配相应的宽度。只有3个字段,对吗?如果其中任何一个值为0,它会消失吗?等一下,我可以试试,但你需要注意那些圆角。顺便说一句,你从哪里得到的截图?不确定有多少个值,所有值都来自服务器,它可能会减少或增加。我从设计团队那里得到这个,他们提供了这个图片作为模型。我发布了一个解决方案,你可以通过这种方式添加你想要的任何值。非常感谢,我将进行必要的更改,但非常感谢您显示路径。很高兴知道代码为您工作:-)是的,您可以根据需要修改其位置和外观。实际上,我的要求是创建一个完全动态的视图,可以有任何数量的条目和颜色来自后端。同样的观点也是一样的。。这是我最大的麻烦。再次非常感谢。@Devraj是的,这是动态的。因为我已经手动输入了值。您可以从后端获取这些值,无论是来自数据库还是您团队的其他人在后端为您执行这些操作。享受
public class MainActivity extends AppCompatActivity {
private EditText typeActive, typeDone, typeOverdue;
private Button btnSubmit;
private View viewDone, viewOverDue, viewActive;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
typeActive = findViewById(R.id.editActive);
typeDone = findViewById(R.id.editDone);
typeOverdue = findViewById(R.id.editOverdue);
btnSubmit = findViewById(R.id.btnSubmit);
viewDone = findViewById(R.id.viewDone);
viewActive = findViewById(R.id.viewActive);
viewOverDue = findViewById(R.id.viewOverdue);
viewDone.setVisibility(View.INVISIBLE);
viewOverDue.setVisibility(View.INVISIBLE);
viewActive.setVisibility(View.INVISIBLE);
//Type all the number of tasks and press the submit button
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String tasksActive = typeActive.getText().toString();
final String tasksDone = typeDone.getText().toString();
final String tasksOverdue = typeOverdue.getText().toString();
int intTaskActive = Integer.parseInt(tasksActive);
int intTaskDone = Integer.parseInt(tasksDone);
int intTaskOverdue = Integer.parseInt(tasksOverdue);
int totalTasks = intTaskActive + intTaskOverdue + intTaskDone;
float percentageActive = (intTaskActive*100.0f)/totalTasks;
float percentageDone = (intTaskDone*100.0f)/totalTasks;
float percentageOverdue = (intTaskOverdue*100.0f)/totalTasks;
int intPercActive = (int)percentageActive;
int intPercDone = (int)percentageDone;
int intPercOverdue = (int)percentageOverdue;
viewDone.setVisibility(View.VISIBLE);
viewOverDue.setVisibility(View.VISIBLE);
viewActive.setVisibility(View.VISIBLE);
viewDone.setLayoutParams(new RelativeLayout.LayoutParams(intPercDone*10, 50));
viewActive.setLayoutParams(new RelativeLayout.LayoutParams(intPercActive*10, 50));
viewOverDue.setLayoutParams(new RelativeLayout.LayoutParams(intPercOverdue*10, 50));
}
});
}
}