好吧,所以我一直在我的應用程序中使用手勢工作了兩天。它是一個基本的秒錶應用程序,也是一個倒計時應用程序,它使用可滑動視圖在兩個不同的活動之間進行切換。將onToubleTapListener附加到文本視圖
我的問題是在我的應用程序的秒錶部分的第一個片段我使用runnable來創建並啓動計時器,它可以正常工作,並且它當前已設置,所以如果用戶點擊計時器文本視圖,開始運行,計時器開始計數。但是,我設置它的方式只能接受一種單擊的輸入法。這是手勢進入的地方。我想單擊以啓動計時器,雙擊可暫停計時器,長按可停止並清除計時器文本視圖。
我已經嘗試過將手勢檢測器附加到TextView上,但是我嘗試的任何東西似乎都不起作用,我相信我可以設置該片段,因此如果我要單擊屏幕上的任何位置,它將會執行我所做的操作希望但我不希望它像那樣工作。我希望它只在用戶單擊定時器文本視圖時才起作用。我已經到了一個我認爲可以實現它的地步,但是這需要在我的TextView中添加一個onDoubleTapListener,但由於某種原因,我無法做到這一點,所以沒有人有辦法做到這一點或爲我的方式代碼工作?
對不起,長的解釋,但我想更多的信息,有關於我想要的東西,越容易會有人幫助:)
下面是我的代碼,我知道這看起來並不太大有組織的(這是我正在努力的工作),但希望你能看到我要去哪裏錯了。謝謝!我也知道目前一些視圖並沒有被使用,純粹是因爲我試圖讓它一次一步地工作:P也是註釋掉的代碼的一部分,是目前的方式我跑我想我會留在這兒,以防有人想知道我當前如何啓動定時器,定時器。)
package com.leccles.swipetabs;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.view.GestureDetectorCompat;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
/**
* A simple {@link android.support.v4.app.Fragment} subclass.
*
*/
public class FragmentA extends Fragment implements
GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
Button lapButton;
TextView timerText;
ListView lapListView;
TextView mMilliTextView;
String milliText;
long startTime = 0;
long timeInMilliSeconds = 0;
GestureDetectorCompat gDetector;
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
long millis = System.currentTimeMillis() - startTime;
int seconds = (int) (millis/1000);
int minutes = seconds/60;
seconds = seconds % 60;
timerText.setText(String.format("%d:%02d", minutes, seconds));
timerHandler.postDelayed(this, 500);
}
};
public FragmentA() {
// Required empty public constructor
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Inflate the layout for this fragment
mMilliTextView = (TextView) getView().findViewById(R.id.milliTextView);
lapButton = (Button) getView().findViewById(R.id.lapButton);
timerText = (TextView) getView().findViewById(R.id.timerText);
lapListView = (ListView) getView().findViewById(R.id.lapListView);
this.gDetector = new GestureDetectorCompat(getActivity(), this);
timerText.setOnDoubleTapListener(this);
/*
* timerText.setOnClickListener(new View.OnClickListener() {
*
* @Override public void onClick(View v) { TextView timerText =
* (TextView) v; if (timerText.getText().equals(
* getView().findViewById(R.string.stopWatchTime))) {
* timerHandler.removeCallbacks(timerRunnable);
*
* } else {
*
* startTime = System.currentTimeMillis();
* timerHandler.postDelayed(timerRunnable, 0);
*
* }
*
* }
*
* });
*/
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return true;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_a, container, false);
}
}