Метод getDrawingCache () Android 2.1 View всегда возвращает значение null

Я работаю с Android 2.1 и имею следующую проблему: использование метода View.getDrawingCache () всегда возвращает null. getDrawingCache () должен возвращать bitmap, которое представляет собой представление содержимого View.

Пример кода:

public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final View view = findViewById(R.id.ImageView01); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); final Bitmap bmp = view.getDrawingCache(); System.out.println(bmp); 

}

Я уже пробовал разные способы настроить объект View для создания кэша чертежа (например, View.setWillNotDraw(boolean) и View.setWillNotCacheDrawing(boolean) ), но ничего не работает.

Каков правильный путь или что я делаю неправильно?

PS: В реальном коде я хочу применить getDrawingCache () в ViewGroup как RelativeLayout. Является ли поведение одинаковым при использовании ViewGroup?

7 Solutions collect form web for “Метод getDrawingCache () Android 2.1 View всегда возвращает значение null”

 Bitmap screenshot; view.setDrawingCacheEnabled(true); screenshot = Bitmap.createBitmap(view.getDrawingCache()); view.setDrawingCacheEnabled(false); 

Вам нужно Bitmap.createBitmap(view.getDrawingCache()); так как битмап, с которого получена ссылка getDrawingCache() перерабатывается.

использование

 onLayout(x, y, width, height); 

например:

 onLayout(0, 0, 100, 100); 

перед вызовом getDrawingCache

Никогда не делайте этого в onCreate! Вы можете сделать это в View.onClickListener или в другом месте.

Я знаю, что это не отвечает на ваш вопрос, но …

Так же, как и другие разработчики, читающие это, если то, что вы действительно пытаетесь сделать, это доступ к содержимому пользовательского представления, вывести свой пользовательский вид из ImageView. А затем создайте canvas и bitmap, которое вы собираетесь контролировать / рисовать / читать и использовать setImageBitmap (), чтобы установить bitmap в объект вида. Оттуда вы можете игнорировать canvas, переданный вам в методе onDraw (canvas), и просто вставлять в ваш локальный canvas / bitmap.

Зачем вам это нужно? По моему мнению, в classе Canvas есть надзор. Класс Canvas не дает вам возможности прочитать содержимое canvasа и не попасть в bitmap. Поэтому, если вам когда-либо понадобится читать из растрового изображения, например, чтобы получить дамп изображения содержимого представления, я не знаю, как это сделать, кроме метода, описанного выше.

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

Насколько я читал последние дни в документации, вы должны использовать только setDrawingCacheEnabled или buildDrawingChache (), но не оба.

была та же проблема, и, наконец, это частично работает для меня:

 view.layout(0, 0, 1000, 100); Bitmap b = view.getDrawingCache(); try { b.compress(CompressFormat.JPEG, 95, new FileOutputStream( Environment.getExternalStorageDirectory() + "/folder/name.jpg")); catch (FileNotFoundException e) { Log.e(LOGTAG, "error:" + e.getMessage()); } 

единственная проблема заключается в том, что я не могу получить полные размеры моего представления. view.getwidth возвращает null …

Проверьте, не превышает ли ваш размер размер экрана. Я нашел это и переключил размеры моего представления так, теперь он работает =) Android получить полный просмотр как bitmap

  • Как очистить MemoryCache?
  • ASP.NET MVC как отключить опцию автоматического кэширования?
  • AngularJS отключает частичное кэширование на dev-машине
  • API с легким API-интерфейсом Java
  • Расseleniumие изображения UIImageNamed: FUD
  • Как отключить кеш запросов Django?
  • Как кэшировать растровые изображения в встроенную память
  • MemoryCache Empty: возвращает null после установки
  • Почему размер кеша L1 меньше, чем размер кэша L2 на большинстве процессоров?
  • Объект jQuery: кешировать или не кэшировать?
  • Как удалить кэш других приложений из нашего приложения для Android?
  • Interesting Posts

    3D-плоскость с наименьшими квадратами

    «Обнаружена ошибка с обнаруженным дефектом» (NTLM не Kerberos) с Kerberos / Spring Security / IE / Active Directory

    Алгоритм для поиска числовой перестановки с учетом лексикографического индекса

    Скрыть пользователя от экрана входа в систему без его деактивации

    Android и XMPP: доступные решения

    Android: как сделать кликабельное изображение карты с каждой страной, производя другое действие?

    как блокировать или ограничивать специальные символы из полей ввода с помощью jquery?

    Комментарий API Graph Graph для Facebook не возвращается

    Как полностью убить / удалить / удалить / остановить AsyncTask в Android

    Заполнение jQuery Mobile ListView с локальными данными JSON

    Android ListView заголовки

    Предупреждение об ошибке «C-style for Statement устарел» в Swift 3

    Работает ли UIGestureRecognizer на UIWebView?

    Как я могу сортировать строку текста, за которой следует число, используя LINQ

    Перенос брекетов между компьютерами Mac

    Давайте будем гением компьютера.