Android:位图不是在扩展ScrollView的视图中绘制的,而是在其中包含其他视图
我试图在滚动视图中绘制一个包含多个组件的位图。我创建了一个自定义视图,它扩展了一个滚动视图,这个自定义视图被用作多个视图的父视图TextView大多数情况下,总之,它只是一个具有滚动功能的大列表。在这个自定义ScrollView中,我调用onDraw并在其中创建一个位图,它需要在自定义ScrollView中的其他视图之上绘制。我的意见如下:Android:位图不是在扩展ScrollView的视图中绘制的,而是在其中包含其他视图,android,layout,bitmap,drawing,scrollview,Android,Layout,Bitmap,Drawing,Scrollview,我试图在滚动视图中绘制一个包含多个组件的位图。我创建了一个自定义视图,它扩展了一个滚动视图,这个自定义视图被用作多个视图的父视图TextView大多数情况下,总之,它只是一个具有滚动功能的大列表。在这个自定义ScrollView中,我调用onDraw并在其中创建一个位图,它需要在自定义ScrollView中的其他视图之上绘制。我的意见如下: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);
@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中使用其他视图有关,因为我也尝试在这样的普通活动中使用此自定义视图:
DrumerscrollView.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>
运行此操作时,位图将显示在“活动”中。但是,当DroperScrollView中有其他视图,并且必须在这些视图上绘制位图时,所有其他视图都显示出来,位图就不存在了。顺便说一句,另一个见解是,在本例中,DrumersCrollView是DrumerLayout的子级,因此得名。
任何反馈都将不胜感激!我想在ScrollView的呈现方式上可能有一些诡计,但我不确定
非常感谢 你看了吗?谢谢你的评论@Antromet刚刚试过,当我使用onMeasure时,我的位图确实被画出来了,但这是唯一被画出来的东西,我的实际布局和所有视图都消失了,我希望我的布局和文本视图和位图都画在上面。有什么建议吗?好的,我不确定。让ScrollView背景透明,然后在“完整视图”组中将背景设置为位图的背景。这样,scrollview背景将显示位图,因为它的背景是透明的,并且scrollview顶部的视图也将被绘制。
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}