بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
بدون عنوان
سلام دوستان
متدی هست که کشیدن انگشت به سمت راست یا هر طرفی رو تعریف کنه؟
مثل setonclicklistener برای کلیک کردن؟
مثلا بگیم زمانی که به سمت راست کشیدند فلان اجرا بشه
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
mohsen-jj
11 سال پیش
+6
0
سلام . این روش کاملا تست شده و درست هست :
برای این کار به دو class نیاز داری :
SwipeInterface که Interface هست .
و همچنین کلاس ActivitySwipeDetector .
و اینکه کلاس Activity که عناصر شما توش هست و مثلا میخواید برا یک عکس یا هرچیز دیگه ای حساسیت به سمت راست یا چپ و ... ایجاد کنید ، باید کلاس SwipeInterface رو Implements کنه .حالا در متودهای override شده left2right و ... میتونید هر اتفاقی که میخواید بیفته رو تعریف کنید . اینجا من یه toast ایجاد کردم .
کدها به شکل زیر هستند :
import android.view.View;
public interface SwipeInterface {
public void bottom2top(View v);
public void left2right(View v);
public void right2left(View v);
public void top2bottom(View v);
}
/////////////////////////////////////////////////////////////////////
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class ActivitySwipeDetector implements View.OnTouchListener {
static final String logTag = "ActivitySwipeDetector";
private SwipeInterface activity;
static final int MIN_DISTANCE = 100;
private float downX, downY, upX, upY;
public ActivitySwipeDetector(SwipeInterface activity){
this.activity = activity;
}
public void onRightToLeftSwipe(View v){
Log.i(logTag, "RightToLeftSwipe!");
activity.right2left(v);
}
public void onLeftToRightSwipe(View v){
Log.i(logTag, "LeftToRightSwipe!");
activity.left2right(v);
}
public void onTopToBottomSwipe(View v){
Log.i(logTag, "onTopToBottomSwipe!");
activity.top2bottom(v);
}
public void onBottomToTopSwipe(View v){
Log.i(logTag, "onBottomToTopSwipe!");
activity.bottom2top(v);
}
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
downY = event.getY();
return true;
}
case MotionEvent.ACTION_UP: {
upX = event.getX();
upY = event.getY();
float deltaX = downX - upX;
float deltaY = downY - upY;
// swipe horizontal?
if(Math.abs(deltaX) > MIN_DISTANCE){
// left or right
if(deltaX < 0) { this.onLeftToRightSwipe(v); return true; }
if(deltaX > 0) { this.onRightToLeftSwipe(v); return true; }
}
else {
Log.i(logTag, "Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE);
}
// swipe vertical?
if(Math.abs(deltaY) > MIN_DISTANCE){
// top or down
if(deltaY < 0) { this.onTopToBottomSwipe(v); return true; }
if(deltaY > 0) { this.onBottomToTopSwipe(v); return true; }
}
else {
Log.i(logTag, "Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE);
v.performClick();
}
}
}
return false;
}
}
///////////////////////////////////////////////////////////////////////////////
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.LayoutInflater.Filter;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
import android.widget.Toast;
public class ActivityMain extends Activity implements SwipeInterface {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout l = (LinearLayout)findViewById(R.id.toucher);
ActivitySwipeDetector swipe = new ActivitySwipeDetector(this);
l.setOnTouchListener(swipe);
}
@Override
public void bottom2top(View v) {
// TODO Auto-generated method stub
Toast.makeText(ActivityMain.this, "top", Toast.LENGTH_SHORT).show();
}
@Override
public void left2right(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.toucher:
// do your stuff here
Toast.makeText(ActivityMain.this, "right", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void right2left(View v) {
// TODO Auto-generated method stub
Toast.makeText(ActivityMain.this, "left", Toast.LENGTH_SHORT).show();
}
@Override
public void top2bottom(View v) {
// TODO Auto-generated method stub
Toast.makeText(ActivityMain.this, "bottom", Toast.LENGTH_SHORT).show();
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .