Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android studio中显示堆叠条形图/图表?_Android_Graph_Mpandroidchart - Fatal编程技术网

如何在android studio中显示堆叠条形图/图表?

如何在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="

我必须创建一个堆栈条形图,我的要求是该图应该是这样的。

我检查了许多图形库,但没有人提供这种类型的UI。
这有可能实现吗

所以我终于找到了解决方法

步骤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));

            }
        });

    }
}