Ответ 1
Просто идея: возможно, вы можете преобразовать шрифт в контур с помощью Paint.getTextPath(...) и использовать этот путь для рендеринга текст. Это должно позволить вам изменить размер пути по мере необходимости.
Итак, я недавно переключился на Android 3.0 (сотовый), и у меня возникли некоторые проблемы с аппаратным рендерингом, особенно в определенном пользовательском представлении, которое я написал, где я использую размер шрифта 200 для отображения некоторого текста.
К сожалению, кажется, что openGLRenderer не очень любит такие довольно большие размеры шрифта, учитывая ошибку, которую я получаю в журнале:
06-06 16:22:00.080: ERROR/OpenGLRenderer(2503): Font size to large to fit in cache. width, height = 97, 145
Существуют ли способы (или способы его устранения), чтобы я мог получить текст, отображаемый с требуемым размером шрифта?
Просто идея: возможно, вы можете преобразовать шрифт в контур с помощью Paint.getTextPath(...) и использовать этот путь для рендеринга текст. Это должно позволить вам изменить размер пути по мере необходимости.
Это действительно ошибка в ОС Android внутри модулей аппаратного ускорения. Я думаю, что лучший способ - попросить систему избежать ускорения HW в TextViews, содержащих большой размер текста. Для этого просто добавьте в код:
TextView bigText = (TextView) findViewById(R.id.bigtext);
bigText.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Метод setLayerType
полезен, но, к сожалению, он поддерживается только для API >= 11. Разработка для API = 8 или менее становится непригодной.
Если вы можете, простое решение отключает аппаратное ускорение только для активности, которая создает проблемы. У меня была эта проблема и она была решена так:
<application
android:...
android:hardwareAccelerated="true" >
<activity ...>
...
</activity>
<activity
...
android:hardwareAccelerated="false">
...
</activity>
</application>
Это решение отключит аппаратное ускорение только для действий, в которых вам это не нужно, и где вы не можете отображать большие тексты.