在我的代码从右到左滑动工作正常但从左到右滑动无法正常工作。我不知道原因是什么。
代码 -
public class Types extends Activity{
RelativeLayout layout1;
int[] backgroundResId;
int currentIndex=0;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_type);
backgroundResId=new int[]{R.drawable.back,R.drawable.bg,R.drawable.frame1};
layout1 = (RelativeLayout) findViewById(R.id.layout1);
changeBackground();
ActivitySwipeDetector activitySwipeDetector = new ActivitySwipeDetector(this);
layout1.setOnTouchListener(activitySwipeDetector);
}
private void changeBackground(){
layout1.setBackgroundResource(backgroundResId[currentIndex]);
}
public class ActivitySwipeDetector implements View.OnTouchListener {
static final String logTag = "ActivitySwipeDetector";
static final int MIN_DISTANCE = 100;
private float downX, upX;
private Activity activity;
public ActivitySwipeDetector(Activity activity){
this.activity = activity;
}
public void onRightToLeftSwipe(){
Log.i(logTag, "RightToLeftSwipe!");
currentIndex++;
if(currentIndex<backgroundResId.length){
changeBackground();
}
}
public void onLeftToRightSwipe(){
Log.i(logTag, "LeftToRightSwipe!");
if(currentIndex>0){
changeBackground();
}
}
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
return true;
}
case MotionEvent.ACTION_UP: {
upX = event.getX();
float deltaX = downX - upX;
// swipe horizontal?
if(Math.abs(deltaX) > MIN_DISTANCE){
// left or right
if(deltaX < 0) { this.onLeftToRightSwipe(); return true; }
if(deltaX > 0) { this.onRightToLeftSwipe(); return true; }
}
else {
Log.i(logTag, "Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE);
return false; // We don't consume the event
}
return true;
}
}
return false;
}
}
在这一行private Activity activity;
我收到警告。为什么呢?
答案 0 :(得分:1)
这是与SimpleOnGestureListener
GestureDetector gestureDetector = new GestureDetector(this, new MyGestureDetector());
layout1 = (RelativeLayout) findViewById(R.id.layout1); // main Layout
然后
layout1.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
});
和MyGestureDetector:
class MyGestureDetector extends SimpleOnGestureListener {
SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// i think this is swipe to right
}
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//and i think this is swipe to left
}
return false;
}
// It is necessary to return true from onDown for the onFling event to
// register
@Override
public boolean onDown(MotionEvent e) {
return true;
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
答案 1 :(得分:1)
你忘了减去currentIndex
public void onLeftToRightSwipe(){
Log.i(logTag, "LeftToRightSwipe!");
if(currentIndex>0){
currentIndex--;
changeBackground();
}
}