2015-04-28 2 views
1

У меня есть пользовательский вид (волновая форма), который необходимо синхронизировать с продвижением медиаплеера. Проблема заключается в том, что у меня другое поведение при использовании Invalidate (Rect) Вот код, который делает обновление в моей настраиваемое представление:Android View.invalidate (Rect) различное поведение между двумя устройствами

public void setProgress(int currentDuration) { 
    // ... Some code to calculate the dirty width 
    invalidate(mDirtyWidth,0,mDirtyWidth+ mDirtyWidthRegion, viewHeight); 
} 

Это прекрасно работающий на Samsung Galaxy 4 (Android 4.4 0,2). Скриншот с "Показать обновления зрения GPU" включен

enter image description here

Но в Nexus 7 (Android 5.1), весь вид получает аннулируется каждый раз: enter image description here

+0

вы используете макет-определители? Различные размеры экрана могут быть причиной для разных параметров макета. – Bondax

ответ

1

После Android 5.0, холст clipBounds всегда ваш взгляд границы с hardwareAccelerated, в Invalidate (грязный Rect) 'ы грязного прямоугольнику игнорируется

5.0 ViewRootImpl.java http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/android/view/ViewRootImpl.java/

  dirty.setEmpty(); 
      mBlockResizeBuffer = false; 
      mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this); 

4,4 ViewRootImpl.java http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/android/view/ViewRootImpl.java/?v=source

  mCurrentDirty.set(dirty); 
      dirty.setEmpty(); 
      attachInfo.mHardwareRenderer.draw(mView, attachInfo, this, 
        animating ? null : mCurrentDirty); 
Смежные вопросы