2013-09-02 4 views
0

Я создал простой пользовательский элемент управления в Android и на нем поместил фоновое изображение. У меня возникают проблемы, когда управление находится на макете в разных размерах (то есть, когда он растягивается), а именно:Имея некоторые проблемы с масштабированием в пользовательском представлении Android

  1. Я хочу наложить прямоугольник в определенной позиции и размера, который я знаю положение пикселя для исходного изображения. Как я могу это сделать с моим контролем. Я подозреваю, что что-то подобное невозможно, поскольку это 9-патч. Является ли мой лучший выбор, чтобы выработать процент от верхнего/левого на оригинале или это бессмысленно, если некоторые части растягиваются, а некоторые нет?

  2. В пользовательский элемент управления я установить изображение, как это в конструкторе:

    setBackgroundResource (R.drawable.buttonbt);

Который работает нормально, однако я хотел изначально сделать это в случае OnDraw, как я мог бы изменить его в зависимости от изменения свойств, например,

Bitmap b=BitmapFactory.decodeResource(getResources(), R.drawable.buttonbt); 
canvas.drawBitmap(b, 0, 0, null); 

Но это не меняет размер в зависимости от размера своей ограничительной рамки, он просто пытается показать его на это оригинальный размер без масштабирования, чтобы соответствовать. Как бы вы это сделали (лучше ли первый метод или нет).

спасибо.

+0

Ad-не знают, что вы имеете в виду – pskink

+0

2 объявления использования drawBitmap с Матричный параметр, заданная матрица с использованием Matrix.rectToRect (- – pskink

+0

Относительно 1. Да, это сложно описать, возможно, мне следовало бы поместить картинку в :) по существу, элемент управления можно растянуть в зависимости от его ширины/высоты и плотности отображения , Я хочу наложить представление на конкретное относительное смещение с помощью прямоугольника - как вычислить это положение, так что это то же самое независимо от размера. Лучше? –

ответ

1

Вы можете создать уменьшенную битовую карту, как показано ниже

Bitmap bitmap = Bitmap.createScaledBitmap(b, width, height, true); 

Надеется, что это будет работать для вас. Пожалуйста, дайте мне знать!

+0

Спасибо. Я понимаю, что есть простой способ получить требуемый размер представления? Я думаю, метод onMeasure ввел меня в замешательство и нужно ли мне это использовать или нет. –

+0

Я не думаю, что вам действительно нужно использовать функцию onMeasure. –

0

нормально, когда ваш взгляд, это сказать 100x100 точек и ваш Bitmap является 300x300, вы можете попробовать следующее (псевдокод здесь) в методе inDraw:

# src is a Bitmap 300x300 
# dst is a View 100x100 
mMatrix.setRectToRect(RectF src, RectF dst, Matrix.ScaleToFit stf) 
canvas.save() 
canvas.concat(mMatrix) 
canvas.drawBitmap(mBitmap, 0, 0, null) 
// actually it will draw a rect with left/top edge at (10, 10) and right/bottom at (20, 20) 
canvas.drawRect(30, 30, 60, 60, paint) 
canvas.restore() 
Смежные вопросы