Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:位图不是在扩展ScrollView的视图中绘制的,而是在其中包含其他视图_Android_Layout_Bitmap_Drawing_Scrollview - Fatal编程技术网

Android:位图不是在扩展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);

我试图在滚动视图中绘制一个包含多个组件的位图。我创建了一个自定义视图,它扩展了一个滚动视图,这个自定义视图被用作多个视图的父视图TextView大多数情况下,总之,它只是一个具有滚动功能的大列表。在这个自定义ScrollView中,我调用onDraw并在其中创建一个位图,它需要在自定义ScrollView中的其他视图之上绘制。我的意见如下:

@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);
        }
}