Android - 计算片段中屏幕上的点击次数

时间:2016-03-13 18:20:22

标签: android android-fragments

一个非常直截了当的问题:我有一个片段,如果满足某个条件,我希望它计算屏幕上的点击次数。

所以我做了一个

view.setOnClickListener(new View.OnClickListener() {
   @Override
       public void onClick(View v) {
           count_tap++;
       }
   });

这似乎几乎可行,但在我看来的某些项目中,没有观察到组件。我是否必须为所有组件(即使是那些通常是静态xml的组件)提供id和id,并使用相同的setOnClickListener设置它们?

或者这样做是否是错误的方式?

3 个答案:

答案 0 :(得分:2)

如果您需要活动或片段的根视图,请使用findViewById(android.R.id.content)

像:

View rootView= getActivity().findViewById(android.R.id.content));

View.OnClickListener设置为此视图:

view.setOnClickListener(new View.OnClickListener() {
   @Override
       public void onClick(View v) {
           count_tap++;
       }
   });

答案 1 :(得分:1)

您可以打包片段的根视图并计算触摸屏。

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之间的时差。

答案 2 :(得分:0)

如果您的布局中没有任何按钮或其他触摸手势,这是另一个可能有效的想法,但我想有更优雅的方法来做到这一点。 您可以使用另一个透明View覆盖您的布局,并使用此透明View来计算点击次数。

这样的事情:

    <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>

而不是你的布局,你应该膨胀view_frame,并在click_counter_layout上设置一个点击监听器。希望它能奏效......