Android: шкала поворота ImageView - PullRequest
2 голосов
/ 23 января 2012

У меня есть imageView, и я в основном пытаюсь сделать датчик стиля термометра.Я добавил изображение ниже для тестирования, и я в основном пытаюсь повернуть изображение.Первая картинка имеет изображение в стандартном макете.После попытки поворота изображения «Ширина» по-прежнему заполняет экран, но уменьшает масштаб изображения, чтобы освободить место для углов, в результате чего фактическое изображение выглядит меньше.Я хочу, чтобы изображение оставалось точно такого же размера, но вращаться на основе матрицы, переданной ему.

Normal Image

Image rotated incorrectly, for me anyways

Вот код IЯ использую для поворота:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        

    circle = (ImageView) findViewById(R.id.imageView1);
    Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.rotated);

    Matrix matrix = new Matrix();
    matrix.postRotate(45);

    Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(),
            matrix, true);

    circle.setImageBitmap(rot);        
}

Итак, мне в основном нужен красный / зеленый круг, чтобы достичь края экрана.Это возможно с imageView, или мне нужно будет написать собственный вид, чтобы вещи были за кадром?Кстати, я не собираюсь рисовать весь этот круг, это всего лишь пример, чтобы объяснить мою проблему.

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Вы должны рассчитать фактическую новую ширину и высоту. попробуйте использовать тригонометрию

newHeight = height/sin(alpha), где альфа - ваш угол поворота ...

newWidth = width/cos(alpha)

тогда:

Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, newWidth, newHeight ,
            matrix, true);

не уверен насчет расчета, я его не проверял, но я думаю, что это правильно, так или иначе, это отличный намек;)

2 голосов
/ 24 января 2012

Не уверен, что это оптимально, но это работает: просто обрезать повернутое растровое изображение до исходного размера.

circle = (ImageView) findViewById(R.id.imageView1);
Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.rotated);

Matrix matrix = new Matrix();
matrix.postRotate(45);

Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(), matrix, true);

int off = (rot.getWidth() - myImg.getWidth()) / 2;
Bitmap result = Bitmap.createBitmap(rot, off, off, myImg.getWidth(), myImg.getHeight());

circle.setImageBitmap(result);
...