Android ScrollView невидимый пользовательский вид - PullRequest
0 голосов
/ 25 июля 2011

У меня есть пользовательское представление, которое я помещаю в ScrollView следующим образом:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <com.test.view android:id="@+id/myview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</ScrollView>

Я реализовал onDraw () и многие другие методы в своем пользовательском представлении, также onMeasure:

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(600, MeasureSpec.EXACTLY));
        width = MeasureSpec.getSize(widthMeasureSpec);
        height = MeasureSpec.getSize(heightMeasureSpec);
}

И затем, когда я запускаю приложение, я получаю много журналов от метода onDraw (), и TouchEvent нормально обрабатывается, но я не вижу Мое собственное представление.Кажется, он есть, но как будто он невидим ...

Может быть, я что-то упускаю ...?

Спасибо

ОБНОВЛЕНИЕ

В пользовательском представлении нет ничего особенного, просто представление, отображающее растровое изображение:

private class myView extends View{

 public myView(Context context) {
  super(context);
 }

 @Override
 protected void onDraw(Canvas canvas) {
  Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.packagebm);
  canvas.drawBitmap(bm, 0, 0, null);
  Log.i("myview", "onDraw()");
 }

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(300, MeasureSpec.EXACTLY));

    }
  }

1 Ответ

0 голосов
/ 01 февраля 2013

Вы должны позвонить setMeasuredDimension в пользовательском представлении onMeasure. Так должно выглядеть так:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, height);
    setMeasuredDimension(widthMeasureSpec, resolveSize(600, heightMeasureSpec));
}
...