2013-03-29 2 views
2

Я изменение height и width из моих CustomView которая простирается Android View во время выполнения, как это:Изменение размера пользовательского вида в режиме исполнения Android

 @Override 
     public void onGlobalLayout() {   
      if(!initialized) {   
       int containerHeight = instance.getHeight(); 
       int containerWidth = instance.getWidth(); 
       myView.getLayoutParams().height = (int) (containerHeight * HEIGHT_RATIO); 
       myView.getLayoutParams().width = (int) (containerWidth * WIDTH_RATIO); 
       instance.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
       initialized = true; 
      } 
     } 

этот код находится в container view Конструктора.

Кроме того мой CustomViewonMeasure() выглядит следующим образом:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // maximum width we should use 
     int width = MeasureSpec.getSize(widthMeasureSpec); 
     int height = MeasureSpec.getSize(heightMeasureSpec); 
     setMeasuredDimension(width, height); 
    } 

Это результат:

enter image description here

Где width и height я указал в том же размере зеленого прямоугольника ,

Мой вопрос: почему фактический размер моего пользовательского вида (красный прямоугольник) не в том же размере, как я дал в качестве входных данных в LayoutParams?

+0

Попробуйте прокомментировать ваш onMeasure(), я не думаю, что вам это нужно в его текущей реализации. – Karakuri

+0

Это не помогло. Я использую эту реализацию, чтобы сократить время измерения моего представления, так как я знаю, что в моем случае размер всегда точен. –

ответ

0

Моя проблема была на рисунке CustomView. В onDraw() я взял width и heightcanvas вместо View.

+0

В моем случае ... Я проектирую и customView, которые получают непрерывную покраску на основе таймера в X-направлении. Этот CView помещен в HScrollView. Любая идея, как можно изменить размер представления в этом случае !!! – CoDe

0

не уверен, какой объект вы работаете с вашего зрения, но вы можете попробовать что-то вроде этого:

CustomViewget.Window() setLayout (370, 480);. // Управление шириной и высотой

+0

Мое пользовательское представление - ПРОСМОТР, а не ДИАЛОГ. –

0

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

Handler handler = new Handler(); 
handler.post(new Runnable() { 
    public void run() { 
    //check sizes and update sizes here 
    }); 
Смежные вопросы