Рисование растрового изображения на холсте было масштабировано - PullRequest
3 голосов
/ 16 февраля 2011

Я создал пользовательский вид с двумя растровыми изображениями. Когда я использую растровое изображение вне моего просмотра в ImageView, изображение в порядке. Мне нужно позвонить setDensity(240) (устройство hdpi), но это нормально. Однако в пользовательском представлении, когда я рисую тот же растровый рисунок на холсте, в переопределенном методе onDraw(Canvas) он снова масштабируется, так же, как я не вызываю setDensity(240). Посредством отладки я гарантировал, что плотность холста и растрового изображения составляет 240, после вызова.

Код:

@Override
protected void onDraw(Canvas canvas) {    
    _ingredient.setDensity(240);
    canvas.setDensity(240);
    canvas.drawBitmap(_ingredient, new Matrix(), new Paint());
    Matrix refMatrix = new Matrix();
    refMatrix.postTranslate(0, _ingredient.getHeight()-35);
    Paint paint = new Paint();
    paint.setAlpha(60);
}

Работающий ImageView, вне моего View.

Bitmap tertr = _cocktail.getCocktailBitmapImage();
tertr.setDensity(240);
ImageView in = new ImageView(this);
in.setScaleType(ScaleType.CENTER);
in.setImageBitmap(tertr);
RelativeLayout relativeLayout = RelativeLayout)findViewById(R.id.cocktail_date_image_layout);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
relativeLayout.addView(in, params);

Первое показывает увеличенное изображение, как и второе, без вызова setDensity. Изображения были созданы на 72dpi. Эти изображения даны, я не могу их изменить. Я что-то упускаю или вот как работает Canvas? Устройство, используемое для тестирования, является DROID2.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Я решил проблему. Фрагмент кода, вызвавший проблему, был в файле манифеста. Мы изменили <supports-screens android:anyDensity="false"/> на true. По умолчанию используется значение True, но, к сожалению, я изменил это, пытаясь использовать разные подходы. С новым значением и методами setDensity() все работает.

1 голос
/ 16 февраля 2011

Плотность растрового изображения - это не плотность экрана, на которой он будет нарисован, а «исходная» плотность растрового изображения.Это означает, что в случае совпадения битовой карты и плотности экрана битовая карта не будет масштабироваться.Вы должны установить битовую плотность 160, если хотите, чтобы размер изображения был таким же, как в пикселях.Надеюсь, это поможет.

Также я думаю, что вы не должны изменять плотность холста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...