2013-09-16 2 views
0

Я знаю, что мой onTouchListener работает, потому что rangeL.setX (rawX-width/20) динамически перемещает мой просмотр, но я не получаю ничего, пытаясь установить ширину, используя paramsRange.width внутри слушателя, как показано в коде. Первый вызов paramsRange.width работает. Есть идеи?Настройка ширины внутри onTouchListener

final LayoutParams paramsRange = rangeView.getLayoutParams(); 
    paramsRange.height = height; 
    paramsRange.width = rangeWidth; 
    rangeView.setX(width/10); 

    rangeL.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      int rawX; 
      final int actionIndex = event.getAction() >> MotionEvent.ACTION_MOVE; 
      final int location[] = { 0, 0 }; 
      v.getLocationOnScreen(location); 
      rawX = (int) event.getX(actionIndex) + location[0]; 
      rangeL.setX(rawX-width/20); 

      rangeView.setX(width/10+(rawX-width/20)); 

      paramsRange.width = rangeWidth-(rawX-width/20); 

      return false; 
     } 

ответ

1

Попробуйте invalidate() родительский вид конца Ранжел о OnTouchListener.

+0

rangeL является дочерним элементом реалистичного макета, поэтому я попытался добавить следующий код перед «return false»; RelativeLayout relativeLayout = (RelativeLayout) findViewById (R.id.relativeLayout); relativeLayout.invalidate(); - это все тот же результат. – user2032323

+1

Наконец-то я получил результат, в котором мне нужно было использовать requestLayout() вместо invalidate() в той же позиции. Благодарю. – user2032323

0

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

rangeView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
rangeView.getMeasuredWidth(); 
rangeView.getMeasuredHeight(); 
Смежные вопросы