Пока копаясь, чтобы найти способ ускорить мои большие тени от текста, я наткнулся на этот вопрос и ответ:
различия API setShadowLayer для Android
Используя:
myView.setLayerType (View.LAYER_TYPE_SOFTWARE, null);
Я резко ускорил все текстовые тени в своем приложении.
Вот пример того, как я его использую:
/**
* Set a backlight (shadow) on the passed TextView.
* @param textView
*/
void setBacklight(TextView textView) {
if (textView != null) {
float textSize = textView.getTextSize();
textView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
textView.setShadowLayer(textSize,0,0,getColor(R.color.color_backlight));
}
}
Согласно этому документу:
https://developer.android.com/guide/topics/graphics/hardware-accel.html
В нем говорится, что вы можете отключить аппаратное ускорение для представления.
Я не знаю почему, но каким-то образом это волшебным образом ускоряет мои теневые слои TextView.
Я знаю, я знаю. Этот метод не существует для классов Canvas или Paint. Таким образом, чтобы ответить на конкретный вопрос (чтобы меня никто не обижал ...), вы можете установить его в представлении, которое вы намереваетесь нарисовать. Как это:
void inTheShadows(View view) {
float left = 0f;
float top = 0f;
float right = 10f;
float bottom = 10f;
Canvas canvas = new Canvas();
Paint paint = new Paint();
paint.setShadowLayer(8.f, 0, 0, 0xff000000);
canvas.drawRect(left, top, right, bottom, paint);
view.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
view.onDrawForeground(canvas);
}