Рисуем вид и все это дети
Я пытаюсь применить визуальный эффект к группе просмотра. Моя идея состоит в том, чтобы взять растровое изображение группы просмотра, уменьшить его, развернуть обратно и нарисовать поверх группы просмотра, чтобы получить блочный эффект низкого качества.
мы получили большую часть пути с помощью этого кода:
public class Blocker {
private static final float RESAMPLE_QUALITY = 0.66f; // less than 1, lower = worse quality
public static void block(Canvas canvas, Bitmap bitmap_old) {
block(canvas, bitmap_old, RESAMPLE_QUALITY);
}
public static void block(Canvas canvas, Bitmap bitmap_old, float quality) {
Bitmap bitmap_new = Bitmap.createScaledBitmap(bitmap_old, Math.round(bitmap_old.getWidth() * RESAMPLE_QUALITY), Math.round(bitmap_old.getHeight() * RESAMPLE_QUALITY), true);
Rect from = new Rect(0, 0, bitmap_new.getWidth(), bitmap_new.getHeight());
RectF to = new RectF(0, 0, bitmap_old.getWidth(), bitmap_old.getHeight());
canvas.drawBitmap(bitmap_new, from, to, null);
}
}
Я просто передаю холст, чтобы рисовать и растровое изображение того, что нужно уменьшить + вверх, и это работает хорошо.
public class BlockedLinearLayout extends LinearLayout {
private static final String TAG = BlockedLinearLayout.class.getSimpleName();
public BlockedLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomAttributes(context, attrs);
setup();
}
public BlockedLinearLayout(Context context) {
super(context);
setup();
}
private void setup() {
this.setDrawingCacheEnabled(true);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// block(canvas); If I call this here, it works but no updates
}
@Override
public void onDraw(Canvas canvas) {
// block(canvas); If I call this here, draws behind children, still no updates
}
private void block(Canvas canvas) {
Blocker.block(canvas, this.getDrawingCache());
}
}
Проблема яу меня есть в моей группе. Если я запускаю метод блока в viewgroup 's рисует, он перебирает все, но неникогда не обновляется, когда меняются дочерние представления. Я'Мы отслеживаем вызовы функций с помощью Log, и метод draw, кажется, работает, но ничего не меняется.
Мы также пытались реализовать это в onDraw. Это рисует растровое изображение позади всех дочерних представлений, и снова они нет обновление.
Может кто-нибудь объяснить, как я бы это исправить?