1
我想實現一個ImageSwitcher移到下一個圖像的一甩。ImageSwitcher與手勢檢測器「一扔」/「刷卡」
它點擊「下一步」按鈕時效果很好,但我無法讓它與一觸即發的GestureDetector配合使用。
基本上我已經在onFling中實現了與onClick相同的代碼。
onClick作品,onfling沒有。
這是代碼。
public class FlipActivity extends Activity {
private int index;
private Button nextButton;
private Animation in;
private Animation out;
private ImageSwitcher questionImageSwitcher;
private Drawable image;
private String subjectArray[] = { "1", "2", "3", "4"};
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
@Override
// =============================================================================
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.story);
index = 0;
in = AnimationUtils.loadAnimation(this,
android.R.anim.fade_in);
out = AnimationUtils.loadAnimation(this,
android.R.anim.fade_out);
// Set up Image Switcher
questionImageSwitcher = (ImageSwitcher) findViewById(R.id.ImageSwitcher_QuestionImage);
questionImageSwitcher.setInAnimation(in);
questionImageSwitcher.setOutAnimation(out);
questionImageSwitcher.setFactory(new MyImageSwitcherFactory());
image = getQuestionImageDrawableXML(subjectArray[index]);
questionImageSwitcher.setImageDrawable(image);
// Gesture detection
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
nextButton = (Button) findViewById(R.id.next);
nextButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
index = index + 1;
image = getQuestionImageDrawableXML(subjectArray[index]);
questionImageSwitcher.setImageDrawable(image);
}
});
} // end onCreate
private class MyImageSwitcherFactory implements ViewSwitcher.ViewFactory {
public View makeView() {
ImageView imageView = new ImageView(FlipActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return imageView;
}
}
private Drawable getQuestionImageDrawableXML(String questionNumber) {
String uri = "img" + questionNumber;
int imageResource = getResources().getIdentifier(uri, "drawable",
getPackageName());
Drawable image = getResources().getDrawable(imageResource);
return image;
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
questionImageSwitcher.setInAnimation(in);
questionImageSwitcher.setOutAnimation(out);
questionImageSwitcher.setFactory(new MyImageSwitcherFactory());
index = index + 1;
image = getQuestionImageDrawableXML(subjectArray[index]);
questionImageSwitcher.setImageDrawable(image);
}
} catch (Exception e) {
// nothing
}
return false;
}
}
}
你在哪裏的GestureListener設爲看法?我沒有看到代碼的那一部分。我只能看到你設置了一個點擊監聽器。 – Varun
謝謝Varun。我想這就是問題所在。 我現在用這個,但仍然沒有工作... questionImageSwitcher.setOnTouchListener(新View.OnTouchListener(){ @覆蓋 公共布爾onTouch(視圖V,MotionEvent事件){ 如果(gestureDetector.onTouchEvent (事件)){ return true; } return false; } }); – user885483
刪除'onClickListener'並再次檢查。 – Varun