【问题标题】:how to display legend on right side of piechart in achartengine android如何在achartengine android中的饼图右侧显示图例
【发布时间】:2011-09-26 09:23:13
【问题描述】:

我正在使用来自 achartengine 教程的饼图视图。这就是我想要的。

我希望图例(即通过/失败)显示在饼图的右侧,如图所示。在 achartengine 的演示示例中,它们是底部对齐的。如何让他们向右?请帮忙!

【问题讨论】:

  • 我在上面添加了一个透明的 frameLayout,得到了我的成就。
  • 你是怎么做到的?你能更具体一点吗?一些示例代码?
  • 如果您想在我的问题中发布您的解决方案以便在 StackOverflow 中使用它。许多用户可能想要它...
  • @Shafi 可以请张贴示例代码,了解在哪里添加框架布局。
  • 不幸的是,我现在无法访问代码。但据我记得,我做了以下事情:在布局文件中,添加一个框架布局,使其透明(我们的饼图将在此布局后面)并通过代码将图例添加到此布局中。将饼图添加为视图(而不是意图)。希望这会有所帮助!

标签: android android-layout achartengine


【解决方案1】:

下面的这段代码对我有用。但我认为最好创建一个 RecyclerView 作为图例,而不是使用 MPAndroidChart 类提供的那个。 我做了什么:

  1. 创建RecyclerViewcelda_recycler_legend.xml
  2. 创建一个 AdapterLegend.java 脚本,扩展 RecyclerView.Adapter 类,以便能够使用带有图例的 RecyclerView。在这个脚本中,我添加了一个 LegendViewHolder 实例,它扩展了 RecyclerView.ViewHolder,并配置了 celda_recycler_legend.xml

适配器图例

 class AdapterLegend extends RecyclerView.Adapter {

    private ArrayList<String> legends;
    private ArrayList<Integer> colors;

    public AdapterLegend(ArrayList legends, ArrayList<Integer> colors) {
        this.legends = legends;
        this.colors = colors;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        return new LegendViewHolder(layoutInflater.inflate(R.layout.celda_recycler_legend, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        LegendViewHolder legendViewHolder = (LegendViewHolder) holder;
        legendViewHolder.LoadLegend(legends.get(position), colors.get(position));
    }

    @Override
    public int getItemCount() { return legends.size(); }
  }

LegendViewHolder

class LegendViewHolder extends RecyclerView.ViewHolder {

    private final TextView legendText;
    private final ImageView legendColorLabel;

    public LegendViewHolder(@NonNull View itemView) {
        super(itemView);

        legendText = itemView.findViewById(R.id.legendTextView);
        legendColorLabel = itemView.findViewById(R.id.legendLabelColor);
    }

    public void LoadLegend(String legend, int legendColor){
        legendText.setText(legend);
        legendColorLabel.setBackgroundColor(legendColor);
    }
}
  1. 我用 AdapterLegend 实例设置了 RecyclerView

       legendRecyclerView = recountDataLayout.findViewById(R.id.chartLegendRecycler);
       legendRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
    

https://github.com/PhilJay/MPAndroidChart/issues/2478#issuecomment-378566623

希望这对你有用!

【讨论】:

  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 你好@Mansi 我不知道。现在我要纠正我的答案谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多