我正在尝试使用 MPAndroidChart 库绘制实时图表。虽然我成功地绘制了图形,但在绘制图形时网格线和限制线不断闪烁。
LineData data = myGraph.getData();
if (data != null) {
LineDataSet set = data.getDataSetByIndex(0);
if (set == null) {
set = createSet();
data.addDataSet(set);
}
// add a new x-value first
DecimalFormat df = new DecimalFormat("#.0");
String xVal = df.format(theRunningTime);
data.addXValue(xVal+"s");
data.addEntry(new Entry( yValue, set.getEntryCount()), 0);
// let the chart know it's data has changed
audioGraph.notifyDataSetChanged();
audioGraph.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
下面的代码介绍了图中的限制线
YAxis yl = myGraph.getAxisLeft();
yl.setTextColor(Color.WHITE);
yl.setTextSize(8f);
yl.setAxisMinValue(0);
yl.setDrawGridLines(false);
yl.setDrawAxisLine(true);
yl.setValueFormatter(new MyValueFormatter());
yl.setStartAtZero(true);
//Remove any previous limit lines
yl.removeAllLimitLines();
LimitLine ll …Run Code Online (Sandbox Code Playgroud) 我正在使用 MPAndroidChart 在片段内创建条形图,但图表高度仅占整个屏幕的一小部分。另外,当高度设置为数字时,它可以正常工作,但这不是我想要的解决方案。问题是什么?下面是片段布局代码。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity$PlaceholderFragment">
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/barchart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
编辑:抱歉缺乏详细信息,我在我的项目中使用了带有操作栏微调器模板的选项卡式活动。
<android.support.design.widget.AppBarLayout android:id="@+id/appbar"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:paddingTop="@dimen/appbar_padding_top"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"
app:layout_scrollFlags="scroll|enterAlways">
<Spinner android:id="@+id/spinner" app:popupTheme="@style/AppTheme.PopupOverlay"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView android:id="@+id/container"
android:layout_width="match_parent" android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
Run Code Online (Sandbox Code Playgroud)
我还有正在运行的应用程序的图像
我是 Android 开发新手,目前正在学习如何构建图表,希望最终连接到数据库并创建动态图表。我使用了 MPAndroid 图表 GitHub 页面 ( https://github.com/PhilJay/MPAndroidChart/ )中的示例,并尝试对其进行操作以满足我的要求。
现在我的图表有一个 x 轴(天)和一个 y 轴(加仑)。
为简单起见,我创建了一个字符串数组“Day1”到“Day30”,用作 X 值。Y 值是一个随机数(只是为了查看不同的条形大小)。
目前:我的图表显示了所有 30 天的随机 Y 值,我可以放大和缩小,以及在放大时向左或向右滚动。
我想要什么:构建图表后,我希望图表的默认视图仅显示 7 天(例如“Day5”到“Day11”),但仍然能够在图表上向左或向右滚动到查看其他1-30天。另外,我希望能够从 7 天缩小到最多 30 天,或者放大以查看至少 3 天。
这是我目前的java文件。我知道现在很草率,我正在学习
public class ConsumptionActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, OnChartValueSelectedListener, OnSeekBarChangeListener {
protected BarChart mChart;
private SeekBar mSeekBarX, mSeekBarY;
private TextView tvX, tvY;
private Typeface mTf;
protected String[] mDays = new String[] {
"Day 1","Day 2","Day 3","Day 4","Day 5","Day 6","Day 7","Day 8","Day 9","Day 10","Day 11","Day 12","Day …Run Code Online (Sandbox Code Playgroud) 我需要在饼图中为每个切片定义特定的十六进制值.
我正在关注维基,但该方法似乎并不适用PieDataSet
PieDataSet dataSet = new PieDataSet(entries, "Fuel");
dataSet.setColors(new int[] { R.color.green1, R.color.green2, R.color.green3, R.color.green4 }, Context);
Run Code Online (Sandbox Code Playgroud)
显示以下错误:
Cannot resolve symbol 'green1'
Expression expected <-- At the 'Context'
Run Code Online (Sandbox Code Playgroud)
是否有另一种设置饼图切片颜色的方法?这似乎适用于折线图,但不适用于饼图.
我正在使用 MPAndroidChart 在我的 Android 应用程序中创建图表。我想知道是否可以使用 MPChart 创建这样的图表。
我使用了LineChart并在LineSet的setFillDrawable中添加了GradientDrawable
int[] colors = {Color.parseColor("#00ff0000"), Color.parseColor("#FFB3F9E3")};
GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TR_BL, colors);
lineSet.setFillDrawable(gd);
Run Code Online (Sandbox Code Playgroud)
但它并没有像预期的那样出现。或者建议我最适合我的目的的图形库。
我还有几个疑问
数据集名称如何与 line 一起显示?
如果绘制了多条线集,如何仅显示一条线的标记视图
如何添加mpandroidchart折线图触摸点值显示带有线条颜色背景的Marker视图
我的期望
我的编码
CustomMarkerView mv = new CustomMarkerView (MainActivity.this, R.layout.tv_content);
chart.setMarkerView(mv);
Run Code Online (Sandbox Code Playgroud)
CustomMarkerView.java
public class CustomMarkerView extends MarkerView {
private TextView tvContent;
public CustomMarkerView (Context context, int layoutResource) {
super(context, layoutResource);
// this markerview only displays a textview
tvContent = (TextView) findViewById(R.id.tvContent);
}
@Override
public void refreshContent(Entry e, Highlight highlight) {
tvContent.setText("" + e.getVal());
}
@Override
public int getXOffset(float xpos) {
return -(getWidth() / 2);
}
@Override
public int getYOffset(float ypos) {
return -getHeight();
}
Run Code Online (Sandbox Code Playgroud)
}
我正在使用 MPAndroidChart 在折叠工具栏中生成一个简单的条形图。当我添加条目时,条目的值在图表上的正确高度可见,但我看不到条形图。
这就是我创建变量的方式:
final List<BarEntry> barEntries = new ArrayList<>();
final BarDataSet barDataSet = new BarDataSet(barEntries, getResources().getString(R.string.cycles_profiled));
final BarData barData = new BarData(barDataSet);
Run Code Online (Sandbox Code Playgroud)
这就是我填充数据并刷新图表的方式:
final Calendar cal = getFirstDayOfWeek();
for (int i = 0; i < NUMBER_OF_DAYS; i++) {
long date = cal.getTimeInMillis();
barEntries.add(new BarEntry(date, map.get(date)));
cal.add(Calendar.DAY_OF_WEEK, 1);
}
barDataSet.setValues(barEntries);
barChart.setData(barData);
barData.notifyDataChanged();
barChart.notifyDataSetChanged();
barChart.invalidate();
Run Code Online (Sandbox Code Playgroud)
我在应用程序的其他部分创建条形图没有问题。当我在折叠工具栏中绘制折线图时,它也工作得很好。
我知道这个例外是什么,我知道有很多类似的问题。但我无法将这些解决方案应用于我的问题。当我使用findById()时一切正常,但是当我尝试使用数据绑定时,我被卡住了。我是数据绑定的新手。
public class HomePieChartMarkerViewModel extends MarkerView {
private TvContentBinding binding;
/**
* Constructor. Sets up the MarkerView with a custom layout resource.
*
* @param context
* @param layoutResource the layout resource to use for the MarkerView
*/
public HomePieChartMarkerViewModel(Context context, int layoutResource) {
super(context, layoutResource);
}
@Override
public void refreshContent(Entry e, Highlight highlight) {
binding.markerValue.setText("$ " + e.getY());// <<<< HERE I GOT AN ERROR
super.refreshContent(e,highlight);
}
private MPPointF mOffset;
@Override
public MPPointF getOffset() {
if(mOffset == null) …Run Code Online (Sandbox Code Playgroud) data-binding android nullpointerexception mpandroidchart android-databinding
我在谷歌上搜索过并尝试了一些“解决方案”,但没有一个对我有用。我正在使用 'com.github.PhilJay:MPAndroidChart:v3.1.0' 并尝试制作折线图。
错误代码如下:
2021-06-29 11:57:35.319 com.example.myApp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myApp, PID: 15886
java.lang.NegativeArraySizeException: -58
at com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:178)
at com.github.mikephil.charting.renderer.LineChartRenderer.drawValues(LineChartRenderer.java:549)
at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:278)
at android.view.View.draw(View.java:23901)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.draw(View.java:23904)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at …Run Code Online (Sandbox Code Playgroud) 我试图在 LimitLine 左侧显示文本,如下所示:
然而,这些是我设置Label限制线位置的唯一选项。
我正在使用LimitLine.LimitLabelPosition.LEFT_TOP,它只显示Label限制线上方的内容。
YAxis leftAxis = mChart.getAxisLeft();
LimitLine minimumLimit = new LimitLine(50f, "Minimum Limit");
minimumLimit.setLineWidth(0.5f);
minimumLimit.setTextColor(ContextCompat.getColor(this, R.color.white_60_opacity));
minimumLimit.setLabelPosition(LimitLine.LimitLabelPosition.LEFT_TOP);
leftAxis.addLimitLine(minimumLimit);
Run Code Online (Sandbox Code Playgroud)
如何LimitLine在 的左侧显示 的标签LimitLine?
编辑:
我也尝试过使用这些方法.setXOffset(50f),.setYOffset(50f)但这只会改变标签的位置,而不改变线条的位置minimumLimit。