Попытка получить размер отображения изображения в ImageView - PullRequest
44 голосов
/ 04 октября 2010

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

Я пытался переопределить метод onDraw ImageView в пользовательском представлении, но я не получаю правильную высоту и ширину ...

public class LandImageView extends ImageView
{
    public LandImageView( Context context )
    {
        super( context );
    }

    public LandImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public LandImageView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw( Canvas canvas )
    {
        super.onDraw( canvas );

        int test = this.getWidth();
        int test2 = this.getHeight();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh)
    {
        super.onSizeChanged(w, h, oldw, oldh);
    }
}

У тебя есть какие-нибудь подсказки?

Ответы [ 13 ]

0 голосов
/ 24 октября 2010

Если я вас правильно понял, вам нужен размер ImageView, чтобы соответственно масштабировать изображение. Я сделал это с помощью пользовательского класса, где я переопределил вызов onMeasure(), чтобы получить ширину и высоту.

class LandImageView extends ImageView{ 
public LandImageView (Context context, AttributeSet attrs) {
  super (context, attrs);
 } 
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
 {
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);

  final int width = MeasureSpec.getSize(widthMeasureSpec);
  final int height = MeasureSpec.getSize(heightMeasureSpec);

  Log.v("", String.format("w %d h %d", width, height));
                // width and height are the dimensions for your image
                // you should remember the values to scale your image later on

  this.setMeasuredDimension(width, height );
 }}

В onMeasure вы получаете ширину и высоту для вашего изображения, чтобы оно соответствовало вашему виду.

Вы можете использовать LandImageView в макете следующим образом:

<my.package.LandImageView ... >
0 голосов
/ 22 октября 2010

Как насчет ImageView.getBackground () или ImageView.getDrawable (), затем Drawable.getBounds ()?

0 голосов
/ 04 октября 2010

попробуйте переопределить onMeasure(int widthMeasureSpec, int heightMeasureSpec) вместо onSizeChanged.

...