Перемещение видов внутри макета / представления в Android - PullRequest
0 голосов
/ 23 марта 2010

У меня более одного вопроса, но я начну с более важного и проблемного:

У меня есть FrameLayout с ImageView внутри.Мне нужно получить размер «полезной области» экрана, на котором моя деятельность накапливается, поэтому я установил onSizeChanged в своем просмотре (я расширил класс ImageView).Здесь все работало нормально.Теперь у меня есть изображение 1000x1000, которое я хочу показать на экране, но без масштабирования.Я хочу, чтобы это было вырезано, правда.Если я установлю размеры ImageView, используя viewObject.setLayoutParams (new Gallery.LayoutParams(1000, 1000));, я получу изображение, которое отображается правильно, но тогда событие onSizeChanged всегда возвращает мне нестандартный размер «1000 x 1000», а не реальное значение размера экрана.Любые идеи о том, как я могу показать изображение с его реальным размером (без масштаба!) И по-прежнему получать представление для отчета о доступном пространстве экрана? Я, конечно, также могу изменить макет при необходимости.

.Amplexos.

1 Ответ

1 голос
/ 23 марта 2010

Вы запрашиваете размеры ImageView?Если так, то вы можете получить это, используя getLocalVisibleRect.Вот как это делается примерно:

ImageView yourImageView;

public void onCreate(...){
    setContentView(...)
    yourImageView = (ImageView) findViewById(...);
    (...)
}

getImageViewSize(){
    Rect imageViewSize = new Rect();
    yourImageView.getLocalVisibleRect(imageViewSize);
    // imageViewSize now has all the values you need
    Log.d("Your log tag", "ImageView width = " + (imageViewSize.right -
            imageViewSize.left));
}

Однако здесь есть одна загвоздка.Вы должны убедиться, что не пытаетесь получить размер вида до тех пор, пока вид не будет разложен на экране.Другими словами, если вы попытаетесь получить его размер в onCreate, его размер будет равен 0. Вы должны получить его позже, например, одновременно с изменением размера изображения, предполагая, что это сделано с помощью кнопки.(Если вы используете SurfaceHolder, вы также можете вызвать его во время обратного вызова surfaceCreated, но я сомневаюсь, что вы используете один из них ...)

...