2011-09-17 11 views
1

まず最初に、私はdon't know howsのためにここにいることに感謝したいと思います。 第2に、私はアンドロイドプログラミングに相対的に新しく、約2週間これをやっています。onTouch on Xで画像を撮る

OK、私の質問:

I`mあなたが画面上でタップすると画像をttakeする必要があるアプリを書きます。 私はそれを行うことができましたが、アプリケーションの後半でライブカメラビューで1つ以上のキャンバスをスクロールすることができます。 画面上の画像をタップしたときに画像が取り込まれてはいけませんが、X秒後に画面をタッチしたままにしておくと、画像が正しく表示されます。

あなたがキャンバスをスクロールしている場合は、画面に当たった瞬間に写真を撮らないようにしてください。

ACTION_DOWNイベントに現在時刻を登録し、現在の時刻+ 5000(miliseconds)と比較しようとすると、これを達成する方法について何か疑問がありますか?

種類よろしく

public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { long activateTime = System.currentTimeMillis();

if(event.getAction() == MotionEvent.ACTION_DOWN && activateTime + 5000 == System.currentTimeMillis()) 
    { 
     takePicture(); 
    } 
} 
return false; 
}; 

EDIT! このソースコードは私の鍵でした。私はcodeを見つけたリンクをHERES

public class GestureDemo extends Activity implements OnGestureListener { 

private GestureDetector gestureDetector; 

@Override 

public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.main); 

gestureDetector = new GestureDetector(this); 

} 

@Override 

public boolean onTouchEvent(MotionEvent event) { 

return gestureDetector.onTouchEvent(event); 

} 

@Override 

public boolean onDown(MotionEvent e) { 

Toast.makeText(this,"oNDown called",Toast.LENGTH_SHORT).show(); 

return false; 

} 

@Override 

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 

float velocityY) { 

Toast.makeText(this,"oNFling called",Toast.LENGTH_SHORT).show(); 
return false; 

} 

@Override 

public void onLongPress(MotionEvent e) { 

Toast.makeText(this,"OnLongPress called",Toast.LENGTH_SHORT).show(); 

} 

@Override 

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 

float distanceY) { 

Toast.makeText(this,"onScroll called",Toast.LENGTH_SHORT).show(); 

return false; 

} 

@Override 
public void onShowPress(MotionEvent e) { 

Toast.makeText(this,"onShowPress called",Toast.LENGTH_SHORT).show(); 

} 

@Override 

public boolean onSingleTapUp(MotionEvent e) { 

Toast.makeText(this,"oNsingleTap called",Toast.LENGTH_SHORT).show(); 

return false; 
} 

</code> 

ありがとうございます、私を正しい道に向けるようにしてください。

+0

現在の時間とイベント時間のあなたの方法は機能しませんか?そうすべき。 –

+0

私は知っているがそれはdoesnt :( –

答えて

2

(例えばGestureDetectorなど)いくつかのアンドロイドのコンポーネントがそれを行う方法は、彼らが遅れてメッセージを送信するためにHandlerを使用しています。たとえば、ACTION_DOWNイベントではsendEmptyMessageDelayed(int what, long delayMillis)を呼び出し、ACTION_UPイベント呼び出しではremoveMessages(int what)を呼び出すことができます。イベントが配信された場合は、ACTION_UPが発生していないことを意味します。これは、ユーザーの指がまだダウンしていることを意味します。しかし、これは指を動かすユーザーを無視します。だから、あなたは「スロープ」エリアを設定し、ACTION_MOVEごとにそれを残しているかどうかをチェックします。ユーザが指の領域を離れると、メッセージをキャンセルします。

GestureDetectorのソースコードhereを読んで、その動作を確認できます。

0
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_UP && event.getEventTime() - event.getDownTime() >= 5000) 
     Toast.makeText(getApplicationContext(), "CAMERA ACTION", Toast.LENGTH_LONG).show(); 
    return true; 
} 
関連する問題