我正在尝试在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的呈现方式可能有些诡计,但我不确定。
非常感谢!