这是我解决它的方法。正如 W00ly 所建议的,我使用 RelativeLayout 作为可点击视图。 RelativeLayout 的优点在于您可以在绝对位置向其添加视图,而仅使用视图无法做到这一点。
我从修改 Main.axml 布局文件开始:
<?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">
<include
android:id="@+id/toolbar"
layout="@layout/mainToolBar" />
<include
android:id="@+id/overflow"
layout="@layout/overflowToolBar" />
<ScrollView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/toolbar"
android:id="@+id/svwMain">
<RelativeLayout
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="3000px"
android:id="@+id/relMain"
android:clickable="true" />
</ScrollView>
</RelativeLayout>
请忽略工具栏。
clickable 属性非常重要。
为了在 Android 语言中跟踪点击次数,您需要做三件事。
在 mainActivity 文件中,我放置了对 RelativeLayout 的引用并调用
它的 SetOnTouchListener() 方法。
relMain = FindViewById<RelativeLayout>(Resource.Id.relMain);
relMain.SetOnTouchListener(this);
为此,您的 mainActivity 必须从 View.IOnTouchListener 派生并扩展:
public class MainActivity : Activity, View.IOnTouchListener
最后,您需要添加 OnTouch() 方法来跟踪调用了 SetOnTouchListener() 方法的任何视图的点击:
public bool OnTouch(View v, MotionEvent e)
{
bool doubleClick = false;
switch (e.Action)
{
case MotionEventActions.Down:
saveClickPosition[0] = clickPosition[0];
saveClickPosition[1] = clickPosition[1];
clickPosition[0] = e.GetX();
clickPosition[1] = e.GetY();
doubleClick = toggleClick(clickPosition[0], clickPosition[1], saveClickPosition[0], saveClickPosition[1]);
break;
}
if (v.GetType() == typeof(TextView) && doubleClick)
{
relMain.RemoveView(v);
return true;
}
switch (v.Id)
{
case Resource.Id.relMain:
if (doubleClick)
{
relParams = new RelativeLayout.LayoutParams(300, 140);
relParams.LeftMargin = (int)clickPosition[0];
relParams.TopMargin = (int)clickPosition[1];
var tvwTest = new TextView(relMain.Context);
tvwTest.Text = string.Format("x: {0} y: {1}", clickPosition[0], clickPosition[1]);
tvwTest.SetOnTouchListener(this);
relMain.AddView(tvwTest, relParams);
}
break;
}
return true;
}
我的 OnTouch() 方法所做的远远超出了完成我的应用程序需要做的事情。我仍然在这里留下完整的方法,因为我做的一些事情可能对其他人有帮助。
请记住,我的方法很混乱。我仍在使用它进行测试。
这是一个简短的视频,显示所有工作:
Video