MPAndroidChart - getChartBitmap не показывает линейную диаграмму

Я пытаюсь создать и поделиться изображением диаграммы, построенной с помощью 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 вики

getChartBitmap(): Returns the Bitmap object that represents the chart, this Bitmap always contains the latest drawing state of the chart.

Bitmap chartBitmap = chart.getChartBitmap();

Затем, как рекомендуется в документации Android, я использую 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>

Это экран диаграммы, которой я хотел бы поделиться, но это - это изображение, которое фактически используется совместно.

Почему отсутствует линия на графике?

0
0
409
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не знаю, но вы можете получить растровое изображение из диаграммы включения макета, Бывший:

view.setDrawingCacheEnabled(true)
view.buildDrawingCache()
Bitmap bm = view.getDrawingCache()
Ответ принят как подходящий

Я решил это! Это была отчасти моя ошибка, но в данном случае библиотека не идеальна. Проблема заключалась в том, что я звонил getChartBitmap внутри onCreateOptionsMenu, который запускается, как только я перехожу к этому Деятельность.

MPAndroidChart позволяет добавить анимацию, которая медленно показывает график; пока я звонил getChartBitmap, анимация все еще продолжалась, поэтому я не мог видеть линию диаграммы, потому что она еще не была загружена.

Я отключил анимацию и теперь все работает нормально. Если кто-то знает, как получить изображение с линией диаграммы и сохранить анимацию, дайте мне знать.

вы можете добавить прослушиватель анимации и получить растровое изображение в методе OnAnimationEnd

Sharone Lev 18.10.2019 08:03

Другие вопросы по теме