MPAndroidChart-getChartBitmap不显示折线图

时间:2018-11-01 13:46:35

标签: android charts mpandroidchart

我正在尝试生成和共享使用MPAndroidChart构建的图表的图像。 我正在使用ShareIntent,这是onCreateOptionsMenu方法:

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate menu resource file
    getMenuInflater().inflate(R.menu.share_menu, menu);

    // Locate share item with ShareActionProvider
    MenuItem shareItem = menu.findItem(R.id.item_share);

    // Fetch and store ShareActionProvider
    shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);

    Bitmap chartBitmap = chart.getChartBitmap();

    File imagesDirectory = new File(getFilesDir(), "images");

    if (!imagesDirectory.isDirectory() || !imagesDirectory.exists()) {
        imagesDirectory.mkdir();
    }

    File bitmapFile = new File(imagesDirectory, chartName.concat(".jpeg"));

    if (!bitmapFile.exists()) {
        try {
            bitmapFile.createNewFile();
        } catch (IOException e){
            e.printStackTrace();
        }
    }

    FileOutputStream outputStream = null;
    try {
        outputStream = new FileOutputStream(bitmapFile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    Uri contentUri = FileProvider.getUriForFile(getBaseContext(), "com.mycompany", bitmapFile);

    chartBitmap.compress(Bitmap.CompressFormat.JPEG, 20, outputStream);

    Intent shareImageIntent = new Intent(Intent.ACTION_SEND);
    shareImageIntent.setType("image/jpeg");
    shareImageIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
    shareImageIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    setShareIntent(shareImageIntent);

    // Return true to display menu
    return true;
}

在这里,我按照MPAndroidChart wiki

的建议从图表中获取了位图
  

getChartBitmap():返回表示图表的Bitmap对象,此Bitmap始终包含图表的最新绘制状态。

Bitmap chartBitmap = chart.getChartBitmap();

然后,as recommend in the Android documentation,我正在使用FileProvider共享图像;这是我在AndroidManifest.xml中声明的地方:

<provider
    android:authorities="com.mycompany"
    android:name="android.support.v4.content.FileProvider"
    android:exported="false"
    android:grantUriPermissions="true">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/images_path"/>
</provider>

这是我指定包含我需要共享的文件的目录的地方

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="sharedImages" path="images/"/>
</paths>

这是我要共享的图表中的the screen,但是this是实际共享的图像。

为什么图表的线丢失了?

2 个答案:

答案 0 :(得分:0)

我不知道,但是您可以从布局包含图表中获取位图, 例如:

view.setDrawingCacheEnabled(true)
view.buildDrawingCache()
Bitmap bm = view.getDrawingCache()

答案 1 :(得分:0)

我解决了!这是我的错,但是在这种情况下库不是完美的。 问题是我在getChartBitmap内部调用onCreateOptionsMenu,当我导航到该活动时就会执行该操作。

MPAndroidChart 使您可以添加动画来缓慢显示图表;在我调用getChartBitmap时动画仍在继续,因此我无法看到图表线,因为它尚未加载。

我禁用了动画,现在一切正常。如果有人知道用图表线获取图像并保留动画的方法,请告诉我。