Android:位图不是在扩展ScrollView的视图中绘制的,并且其中包含其他视图

时间:2015-02-14 00:55:04

标签: android layout bitmap drawing scrollview

我正在尝试在ScrollView中绘制一个包含多个组件的位图。我创建了一个扩展ScrollView的自定义视图,这个自定义视图被用作多个视图的父级(TextViews主要是,总而言之,它只是一个具有滚动功能的大列表)。在这个自定义ScrollView中,我调用onDraw并在其中创建一个位图,需要在自定义ScrollView中的其他视图之上绘制。我的onDraw如下:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Bitmap bitmap = BitmapFactory.decodeResource(AppData.instance().getResources(),
            R.drawable.cabin);
    canvas.drawBitmap(bitmap, canvas.getWidth()/3, canvas.getHeight()/3, null);
}

我知道每次滚动时都会调用onDraw,因此我假设布局中存在一些视图冲突。非常肯定这个问题与自定义scrollView中的其他视图有关,因为我也尝试在这样的普通活动中使用这个自定义视图:

DrawerScrollView.java

public class DrawerScrollView extends ScrollView {

    int mX;
    int mY;

    private OnScrollViewListener mOnScrollViewListener;

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

    public DrawerScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawerScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setOnScrollViewListener(OnScrollViewListener onScrollViewListener) {
        mOnScrollViewListener = onScrollViewListener;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        mOnScrollViewListener.onScrollChanged(this, l, t, oldl, oldt);
        mX = l;
        mY = t;
    }

    public interface OnScrollViewListener {
        void onScrollChanged(DrawerScrollView drawerScrollView, int l, int t, int oldl, int oldt);
    }

    @Override
    protected void onAttachedToWindow()
    {
        setLayerType(LAYER_TYPE_SOFTWARE, null);
    }

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Bitmap bitmap = BitmapFactory.decodeResource(AppData.instance().getResources(),
            R.drawable.cabin);
    canvas.drawBitmap(bitmap, canvas.getWidth()/3, canvas.getHeight()/3, null);
}
}

这是布局main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.blah.DrawerScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    </com.blah.DrawerScrollView>

</LinearLayout>

这是活动MainActivity.java

public class MainActivity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
}

当我运行它时,位图显示在Activity中。但是当DrawerScrollView中有其他视图并且必须在它们之上绘制位图(所有其他视图都被显示)时,位图就不存在了。顺便说一句,另一个见解是,在这种情况下,DrawerScrollView是DrawerLayout的子代(因此名称)。 任何反馈将不胜感激!我假设ScrollView的呈现方式可能有些诡计,但我不确定。

非常感谢!

0 个答案:

没有答案