Сделайте скриншот всего просмотра - PullRequest
39 голосов
/ 20 марта 2012

Я построил таблицу, которая в основном выполняется HorizontalScrollView внутри ScrollView. Я сделал пользователь может редактировать поля.

Теперь я хочу сохранить таблицу на экране, jpg, png, pdf или что-нибудь еще.

Проблема в том, что таблица почти всегда больше экрана.

Есть ли способ сделать скриншот всего макета ScrollView? Если нет, то как вы думаете, что может сделать эту работу?

Ответы [ 14 ]

0 голосов
/ 08 января 2017
public static Bitmap loadBitmapFromView(ScrollView v) {
    Bitmap b = Bitmap.createBitmap(v.getWidth() , v.getChildAt(0).getHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.draw(c);
    return b;
}
0 голосов
/ 02 июля 2016

// set button click listener

    share = (Button)findViewById(R.id.share);
    share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bitmap bitmap = takeScreenshot();
            saveBitmap(bitmap);

        }
    });

// затем вам нужно создать два метода

    public Bitmap takeScreenshot() {
    View rootView = findViewById(android.R.id.content).getRootView();
    rootView.setDrawingCacheEnabled(true);
    return rootView.getDrawingCache();
    }

    public void saveBitmap(Bitmap bitmap) {
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png");
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
   }

После добавления этого кода в ваше приложение, запустите приложение и проверьте вашлокальное хранилище, вы создали снимок экрана всей страницы.

0 голосов
/ 18 июня 2014

попробуй это у меня нормально работает

TableLayout tabLayout = (TableLayout) findViewById(R.id.allview);

    if (tabLayout != null) {

            Bitmap image = Bitmap.createBitmap(tabLayout.getWidth(),
                    tabLayout.getHeight(), Config.ARGB_8888);
            Canvas b = new Canvas(image);

            tabLayout.draw(b);
}
0 голосов
/ 20 марта 2012

Возможно, вы сможете использовать кэш чертежа вида, но я не уверен, будет ли он содержать весь вид или только то, что отображается на экране.

Я бы посоветовал вам поохотиться наStackOverflow для похожих вопросов, его, скорее всего, задавали раньше.

...