Я использую холст и растровое изображение для рисования графики, такой как круги, текст и т. Д., И хочу, чтобы мои графические процедуры использовали фактические пиксели на основе истинного разрешения экрана в пикселях, как это было бы в графическом приложении для ПК. Очевидно, что ОС Android предназначена для использования плотностей, чтобы попытаться предоставить пользователю хороший опыт, независимо от фактического размера экрана и разрешений устройства. Однако, когда я даю команду установить пиксель x, y, тогда было бы неплохо фактически установить пиксель x, y, а система не должна переопределять мои координаты - возможно ли переопределить систему, чтобы установить пиксель x, y?
Например, если экран установлен на 320x480 (G1 или Hero), он работает нормально, но на планшете (IMX515) с экраном 800x600 графика всегда растягивается по горизонтали.
Я пытался установить разную плотность Bitmap и Canvas, но ничего не работает - на планшете они всегда растягиваются, чтобы заполнить ширину экрана.
Я тоже пробовал в манифесте
<supports-screens android:anyDensity=”true” />
.
Вот некоторые фрагменты кода, основанные на SurfaceView: -
(1) В создании и настройке растрового изображения (screenWidth, screenHeight из метрик): -
backBitmap=Bitmap.createBitMap(screenWidth,screenHeight,Bitmap.config.ARGB_8888);
//backbitmap.setDensity(160)
backCanvas=new Canvas(backBitmap)
//backCanvas.setDensity(160);
.
(2) В процедуре рисования: -
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
backCanvas.drawCircle(50,50,30,paint);
.
(3) В методе Canvas onDraw: -
protected void onDraw(Canvas canvas){
if (drawingFlag==true){
// canvas.setDensity(160)
canvas.drawBitmap(backBitmap,0,0,null);
}
}
.
,
* Решение ******
Удивительно, насколько я неряшлив - я работал с Media Player и оставил следующий код при создании SurfaceView: -
holder=mySurfaceView.getHolder();
holder.setFixedSize(320,480);
Это вынудило рисунок в 320x480 затем масштабировать по экрану.
Меняется, как указано ниже, исправленная проблема
holder.setFixedSize(800,600)