MPAndroidChart - getChartBitmap не показывает линейный график - PullRequest
0 голосов
/ 01 ноября 2018

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

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

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

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

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

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

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

0 голосов
/ 01 ноября 2018

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

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