我的片段布局中有一个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;
}
答案 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监听器{用于缩放/缩放}