gpt4 book ai didi

android - 带手势检测器的 ImageSwitcher "fling"/"swipe"

转载 作者:行者123 更新时间:2023-11-30 04:32:50 24 4
gpt4 key购买 nike

我正在尝试实现一个 ImageSwitcher 以移动到下一张图片。

单击“下一步”按钮时效果很好,但我无法让它与 fling 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;
}
}
}

最佳答案

正如 Varun 所说,您必须将 GestureListener 设置为 View 。您还需要覆盖 GestureDetector 类上的 onSingleTapConfirmed 和 onDown 方法:

class MyGestureDetector extends SimpleOnGestureListener {

@Override
public boolean onSingleTapConfirmed(MotionEvent e)
{
return super.onSingleTapConfirmed(e);
}

@Override
public boolean onDown(MotionEvent e)
{
return true;
}

@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;
}
}

关于android - 带手势检测器的 ImageSwitcher "fling"/"swipe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com