添加ScrollView会破坏我的CanvasView

时间:2015-07-13 02:42:22

标签: android android-layout android-scrollview

我的片段布局中有一个CanvasView,可以让我绘制到屏幕上。但是,在向布局添加ScrollingView时,片段能够滚动但我无法再绘制。有人知道为什么吗?画布位于scrolllayout内部的framelayout内。如果我不清楚我的意思,基本上我不能在我的画布上画画,如果在同一地点也有滚动视图。

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.brettrosen.atls.fragments.PrimarySurvey">

<ScrollView
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.brettrosen.atls.canvas.CanvasView
        android:id="@+id/canvas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <CheckBox
            android:id="@+id/prearrival_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_1"
            android:textSize="17sp"
            android:textColor="#FF0000"
            android:layout_marginBottom="30dp"
            />

        <CheckBox
            android:id="@+id/prearrival_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_2"
            android:textColor="#FF0000"
            android:textSize="17sp"
            android:layout_marginBottom="25dp"
            />


        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <CheckBox
                android:id="@+id/prearrival_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/prearrival_3"
                android:textSize="17sp"
                android:textColor="#FF0000"
                />

            <EditText
                android:layout_width="60dp"
                android:layout_height="wrap_content"
                android:inputType="number"
                android:layout_marginBottom="30dp"
                android:hint="kg"
                />

        </LinearLayout>

        <CheckBox
            android:id="@+id/prearrival_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_4"
            android:textColor="#FF0000"
            android:textSize="17sp"
            />

        <CheckBox
            android:id="@+id/prearrival_5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_5"
            android:textColor="#FF0000"
            android:textSize="17sp"
            />

        <CheckBox
            android:id="@+id/prearrival_6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_6"
            android:textColor="#FF0000"
            android:textSize="17sp"
            />

        <CheckBox
            android:id="@+id/prearrival_7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_7"
            android:textColor="#FF0000"
            />

        <CheckBox
            android:id="@+id/prearrival_8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_8"
            android:textColor="#FF0000"
            android:textSize="17sp"
            android:layout_marginBottom="30dp"
            />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:text="For Attending level activations:"
                android:textSize="17sp"
                />

            <CheckBox
                android:id="@+id/prearrival_9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/prearrival_9"
                android:textSize="17sp"
                />

        </LinearLayout>


        <CheckBox
            android:id="@+id/prearrival_10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_10"
            android:textColor="#FF0000"
            android:textSize="17sp"
            />

        <CheckBox
            android:id="@+id/prearrival_11"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_11"
            android:textColor="#FF0000"
            android:textSize="17sp"
            />

        <CheckBox
            android:id="@+id/prearrival_12"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prearrival_12"
            android:textColor="#FF0000"
            android:textSize="17sp"
            />

    </LinearLayout>

</FrameLayout>

</ScrollView>

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/grey_bar"
        android:layout_alignParentBottom="true"/>

    <ToggleButton
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@drawable/toggle_selector"
        android:textOff=""
        android:textOn=""
        android:id="@+id/drawToggle"
        android:layout_alignTop="@+id/toolbar"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:onClick="onDrawClicked"/>

</RelativeLayout>

编辑:我尝试将我的ScrollView移动到我的FrameLayout(在画布下面),但它仍然无法正常工作。

CanvasView.java onDraw()

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    // Before "drawPath"
    canvas.drawColor(this.baseColor);

    if (this.bitmap != null) {
        canvas.drawBitmap(this.bitmap, 0F, 0F, new Paint());
    }

    for (int i = 0; i < this.historyPointer; i++) {
        Path path   = this.pathLists.get(i);
        Paint paint = this.paintLists.get(i);

        canvas.drawPath(path, paint);
    }

    this.drawText(canvas);

    this.canvas = canvas;
}

2 个答案:

答案 0 :(得分:0)

使用您的布局第一个复选框重叠画布。尝试更改布局。我看到Canvas,我可以滚动。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.brettrosen.atls.fragments.PrimarySurvey">

<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">


<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <com.example.zzztest2.CanvasView
    android:id="@+id/canvas"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal" />

    <CheckBox
        android:id="@+id/prearrival_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="cc1"
        android:textSize="17sp"
        android:textColor="#FF0000"
        android:layout_marginBottom="30dp"


...
..

答案 1 :(得分:0)

我还尝试在滚动视图中添加画布,但意识到有更好的方法。

而是使用canvas功能: canvas.translate(offsetx,offsety){用于滚动} 和 canvas.scale(scalexFactor,scaleyFactor){for pinch zoom}

在画布Draw()函数的开头

这些允许您模拟可缩放的滚动视图,并且工作得更快。

显然,您在翻译和缩放中的(x,y)输入值将由您使用确定 1)您的触摸事件功能(触摸,触摸拖动,触摸){用于滚动} 2)pinchgesture监听器{用于缩放/缩放}