Я просмотрел другие вопросы по этому поводу, и ни один из них не применим к моей ситуации. мой метод onDraw в пользовательском представлении вызывается постоянно, примерно раз в 0,3 секунды.
У меня есть пользовательский вид, который рисует карту внутренней части здания. Представление больше, чем область просмотра, поэтому я обернул пользовательское представление внутри пользовательского ScrollView и HorizontalScrollView. Метод onDraw большой, поэтому я не могу опубликовать его здесь. Однако я удалил весь код из onDraw, и это ничего не изменило.
Если я уберу использование двух представлений прокрутки, onDraw вызывается только один раз и вызывается снова только в том случае, если я масштабирую карту.
Изменить: добавлено в полный пользовательский класс прокрутки. класс вертикальной прокрутки такой же, как этот.
public class SCEHorizontalScrollViewBase extends HorizontalScrollView {
private GestureDetector mGestureDetector;
private String TAG = this.getClass().getName();
public SCEHorizontalScrollViewBase(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new XScrollDetector());
setFadingEdgeLength(10);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.d(TAG, "onInterceptTouchEvent");
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev) && ev.getPointerCount()==1;
}
// Return false if we're scrolling in the Y direction
class XScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.d(TAG, "onScroll");
super.onScroll(e1, e2, distanceX, distanceY);
if(Math.abs(distanceY) < Math.abs(distanceX)) {
return true;
}
return false;
}
}
}
также добавлен файл макета.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent" >
<mobile.base.SCEScrollViewBase
android:fillViewport="true"
android:id="@+id/warehouseScrollWidget"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scrollbarFadeDuration="999999"
android:scrollbarStyle="outsideOverlay" >
<mobile.base.SCEHorizontalScrollViewBase
android:fillViewport="true"
android:id="@+id/warehouseHorizontalScrollWidget"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scrollbarFadeDuration="999999"
android:scrollbarStyle="outsideOverlay" >
<mobile.base.widgets.SCEWidgetWarehouseView
android:id="@+id/WarehouseView"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</mobile.base.SCEHorizontalScrollViewBase>
</mobile.base.SCEScrollViewBase>
</RelativeLayout>
Из моих журналов я получаю это.
08-27 15:28:32.376: mobile.base.SCEHorizontalScrollViewBase(21571): requestLayout
08-27 15:28:32.376: mobile.base.widgets.SCEWidgetWarehouseView(21571): requestLayout
08-27 15:28:32.386: mobile.base.SCEScrollViewBase(21571): requestLayout
08-27 15:28:32.386: mobile.base.SCEHorizontalScrollViewBase(21571): requestLayout
08-27 15:28:32.386: mobile.base.SCEScrollViewBase(21571): requestLayout
08-27 15:28:32.416: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.416: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.456: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.456: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.476: mobile.base.SCEScrollViewBase(21571): onDraw
08-27 15:28:32.486: mobile.base.SCEHorizontalScrollViewBase(21571): onDraw
08-27 15:28:32.486: mobile.base.widgets.SCEWidgetWarehouseView(21571): onDraw
08-27 15:28:32.877: mobile.base.SCEScrollViewBase(21571): onDraw
08-27 15:28:32.877: mobile.base.SCEHorizontalScrollViewBase(21571): onDraw
08-27 15:28:32.877: mobile.base.widgets.SCEWidgetWarehouseView(21571): onDraw
08-27 15:28:33.117: mobile.base.SCEScrollViewBase(21571): onDraw
08-27 15:28:33.117: mobile.base.SCEHorizontalScrollViewBase(21571): onDraw
08-27 15:28:33.117: mobile.base.widgets.SCEWidgetWarehouseView(21571): onDraw
Любые идеи, почему он это делает? Раньше этого не было, что-то изменилось и я не знаю что. Раньше экран прокручивался довольно быстро, а теперь почти не двигается.
onDraw()
в Android будет вызываться с частотой обновления экрана, например: 40 раз в секунду в SDK ‹ 16 и 60 раз в секунду в SDK ›=16 - person tolgap   schedule 28.08.2012