Android 安卓-在一个片段中计算屏幕上点击的次数
一个非常简单的问题:我有一个片段,如果满足某个条件,我希望它计算屏幕上点击的次数 所以我做了一个Android 安卓-在一个片段中计算屏幕上点击的次数,android,android-fragments,Android,Android Fragments,一个非常简单的问题:我有一个片段,如果满足某个条件,我希望它计算屏幕上点击的次数 所以我做了一个 view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count_tap++; } }); 这似乎几乎是可行的,但在我看来,在某些项目上,没有观察到组件。我是否必须为我的所有组件(甚至是那些通常是静态xml
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count_tap++;
}
});
这似乎几乎是可行的,但在我看来,在某些项目上,没有观察到组件。我是否必须为我的所有组件(甚至是那些通常是静态xml的组件)提供和标识,并使用相同的setOnClickListener
设置它们
或者这样做是错误的吗?如果需要活动或片段的根视图,请使用
findviewbyd(android.R.id.content)
比如:
将View.OnClickListener
设置为此视图:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count_tap++;
}
});
您可以包装片段的根视图,并计算润色次数
public class TouchCounter extends FrameLayout {
private int touchCount;
public TouchableOverlay(Context context) {
super(context);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
touchCount++;
break;
}
}
return super.dispatchTouchEvent(ev);
}
public int getTouchCount() {
return touchCount;
}
}
在你的片段中:
.....
private TouchCounter touchCounter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
return addTouchCounter(view);
}
.....
private void addTouchCounter(View view) {
touchCounter = new TouchCounter(getContext());
touchCounter.addView(view);
return touchCounter;
}
如果您只想计算点击次数,还可以添加一个ACTION_DOWN的案例,并计算ACTION_DOWN和ACTION_UP/CANCEL之间的时间差。如果您的布局中没有任何按钮或其他触摸手势,下面是另一个可能可行的想法,但我想有更优雅的方法可以做到这一点。 您可以使用另一个透明的
视图
覆盖布局,并使用此透明的视图
计算点击次数
大概是这样的:
<FrameLayout
android:id="@+id/view_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
/// instead of this LinearLayout you can put your layout
</LinearLayout>
<View
android:id="@+id/click_counter_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@android:color/transparent"/>
</FrameLayout>
///您可以将您的布局替换为线性布局
您应该充气
查看\u框架
,并在单击计数器\u布局
上设置一个单击侦听器,而不是布局。希望它能起作用……不,它根本不起作用。。。点击某些元素(如文本视图)不被计算在内。。我可以让用户点击一个按钮来解决这个问题,但是如果可能的话,我不希望发生这种情况,因为您已经在TextView
上设置了setOnClickListener
,它在点击TextView
时被调用,而不是根视图侦听器。不,我已经按照您的建议在我创建的新根视图上设置了它。正如我所说,当点击元素(如textview)时,点击根本不被计算在内。我希望它能在我所有的屏幕上工作,你的完整片段。
<FrameLayout
android:id="@+id/view_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
/// instead of this LinearLayout you can put your layout
</LinearLayout>
<View
android:id="@+id/click_counter_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@android:color/transparent"/>
</FrameLayout>