如何设置画布(绘画​​视图)在列表视图的顶部,并且仍然使列表视图可点击?

时间:2018-11-14 20:23:55

标签: android listview

我有一个包含ListView和RelativeLayout中的几个按钮的布局。我试图让用户使用自定义的绘画视图布局在页面上绘制。好消息是,我几乎可以完成所有工作并查看应如何操作,但是最后一个也是最令人沮丧的问题是ListView根本无法单击。我想在ListView上绘制并使其可单击。

有趣的是,页面上的按钮仍可单击,而ListView中的项目则不可。我认为正在发生的事情是ListView由适配器加载并首先加载(因此位于所有内容之后)。我该怎么做才能使ListView可点击?

我尝试添加android:focusableInTouchMode =“ true” android:focusable =“ true”,但这没什么区别。

我的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical" >

<ListView android:id="@+id/lv"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    ></ListView>

    <com.my.app.PaintView
    android:id="@+id/paintView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


<Button
    Buttons Here.../>

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

对于您不想想要接收触摸事件的元素,focusable属性应为false。要覆盖PaintView而又不拦截触摸事件,可以向其中添加一些XML属性:

<com.my.app.PaintView
    ...
    android:focusable="false"
    android:clickable="false" />

只要您没有为PaintView设置OnClickListenerOnTouchListener,触摸事件就应该简单地传递给它后面的视图。

答案 1 :(得分:0)

设法找到一个完美的解决方案(至少对我而言)。我想如果没有listview,这会容易得多,但是我希望listview既能工作又能在画布上绘图。我最后要做的就是在具有ListView的主活动中设置一个onTouchListener,然后将其与MotionEvent发送到PaintView。很简单,效果很好:

compStyle.toString()

在此示例中,paintView.onTouchEvent实际上可以是自定义视图中的任何方法,为简单起见,只需将其保留在“ onTouchEvent”即可。