Можно визуализировать вид с низким разрешением, а затем увеличить его до фактического размера, используя метод setFixedSize()
для SurfaceHolder
.Однако масштабирование выполняется с помощью некоторой интерполяции, в результате чего все становится размытым.
Есть ли способ изменить метод интерполяции на ближайший сосед или просто отключить его?
Вот пример того, что я имею в виду, Сделанный с поверхностью 4x4 в полноэкранном режиме:
Слева: Вот какЯ хочу, чтобы результат выглядел (здесь достигается путем рисования неотфильтрованного растрового изображения)
Правое изображение: Это то, что происходит, когда холст 4x4 масштабируется до полноэкранного.
Пример кода для генерацииправильное изображение, если кому-то интересно:
public class ScaleView extends SurfaceView implements SurfaceHolder.Callback {
private final static float[] points = {0,0, 2,0, 4,0, 1,1, 3,1, 0,2, 2,2, 4,2, 1,3, 3,3};
private Paint white;
public ScaleView(Context context) {
super(context);
white = new Paint();
white.setColor(0xFFFFFFFF);
getHolder().addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
Canvas c = holder.lockCanvas();
try{
c.drawPoints(points, white);
}finally{
holder.unlockCanvasAndPost(c);
}
}
@Override
public void surfaceCreated(SurfaceHolder holder){
holder.setFixedSize(4, 4);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){}
}
Примечание: Приведенный выше квадратный узор - всего лишь пример эффекта, которого я хочу избежать.Я ищу общее решение, которое можно применить к любому представлению (с поверхностным держателем) с любым содержимым.