2011-08-25 5 views
0

Android가 처음인데 이전 페이지와 다음 페이지로 이동하려면 왼쪽에서 오른쪽으로 오른쪽에서 왼쪽으로 스 와이프 할 수있는 페이지를 만들려고합니다. 나는 많은 시간을 보면서 다른 일을 시도했다. 왠지 이유는 무엇이든 상관없이 스 와이프하면 다음 사진 만 보여줍니다. 오른쪽에서 왼쪽으로 스 와이프하면 이전 사진이 표시되어 있어야합니다. 어떤 도움을 주시면 감사하겠습니다! 시간 내 주셔서 감사합니다.Android : 왼쪽에서 오른쪽으로 오른쪽에서 왼쪽으로 스 와이프

public class MyGestureDetector extends SimpleOnGestureListener 
{ 
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; 
public boolean isRightToLeft = false; 

@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 
    // right to left swipe 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      isRightToLeft = true; 
      return true; 
     }    
     // left to right swipe 
     else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      isRightToLeft = false; 
      return true; 

     } 
    } catch (Exception e) { 
     // nothing 
    } 
    return false; 
} 

} 






public class Pictures extends Activity 
{ 
private int pictureCounter = 1; 
private Context myContext = this; 
private GestureDetector gestureDetector; 
View.OnTouchListener gestureListener; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pictures); 
    getPicture(pictureCounter); 


    final MyGestureDetector myGestureDetector = new MyGestureDetector(); 
    // Gesture detection 
    gestureDetector = new GestureDetector(myGestureDetector); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       if (myGestureDetector.isRightToLeft) 
       { 
        previousPicture(); 
       } 
       else if (!myGestureDetector.isRightToLeft) 
       { 
        nextPicture(); 
       } 
       return true; 
      } 
      return false; 
     } 
    }; 
    //iv.setOnTouchListener(gestureListener); 
    ((ImageView)findViewById(R.id.title_pictures)).setOnTouchListener(gestureListener); 


    ImageView iv = (ImageView) findViewById(R.id.flag_pic); 
    iv.setOnClickListener(new OnClickListener() 
    { 

     public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
      nextPicture(); 
     } 
    }); 
} 

public void getPicture(int picCounter) 
{ 
    DatabaseHelper myDbHelper = new DatabaseHelper(this); 

    try 
    { 
     myDbHelper.createDatabase(); 
    } 
    catch (IOException ioe) 
    { 
     throw new Error("Unable to create databse"); 
    } 

    try 
    { 
     myDbHelper.openDatabase(); 
    } 
    catch(SQLException sqle) 
    { 
     throw sqle; 
    } 

    String query = "select Before_Picture, After_Picture from picture_mapping where _id = " + picCounter; 

    SQLiteDatabase db = myDbHelper.getReadableDatabase(); 

    Cursor cursor = db.rawQuery(query, null); 
    cursor.moveToFirst(); 
    String beforePicture = cursor.getString(0); 
    String afterPicture = cursor.getString(1); 

    cursor.close(); 
    db.close(); 

    ImageView before_pic = (ImageView) findViewById(R.id.imgView_before_pic); 
    int resId = myContext.getResources().getIdentifier(beforePicture,"drawable", "com.ash.android.pictures"); 
    before_pic.setBackgroundResource(resId); 

    TextView after_pic = (TextView) findViewById(R.id.txtView_after_picture); 
    after_pic.setText(afterPicture); 
    //Toast toast=Toast.makeText(this, beforePicture+ ":" + afterPicture, Toast.LENGTH_LONG); 
    //toast.show(); 



} 

public void nextPicture() 
{ 
    if (pictureCounter < 36) 
    { 
     pictureCounter += 1; 
     getPicture(pictureCounter); 
    } 
    else 
    { 
     //do nothing 
    } 
} 

public void previousPicture() 
{ 
    if (pictureCounter > 1) 
    { 
     pictureCounter -= 1; 
     getPicture(pictureCounter); 
    } 
    else 
    { 
     //do nothing 
    } 

} 
} 

미리 감사드립니다.

답변

1

활동에

iv.setOnClickListener 

주석과 나는 날뛰는가 작동한다고 생각합니다.

0

죄송합니다. 저는 knowledgable이 아니며 실제로이 질문에 직접 답변하려고합니다 ... 티타늄 API를 사용하여 프로그래밍하기 때문에 코드 구문에 익숙하지 않습니다. 일반적인 생각은 있지만 (아직 내 인턴십에 대한 2 주간의 훈련 기간에) 지점하지만 TO

, 나는 꽤 일찍

//right to left swipe 
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
    isRightToLeft = true; 
    return true; 
}    
// left to right swipe 
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
    isRightToLeft = false; 
    return true; 
} 

그것은 당신의 방정식처럼 보이는에 다음 코드 줄을 볼

if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) 

은 스 와이프를 감지하기 위해 작동합니다 ... 그러나 코드에서 ABS() 기능은 스 와이프의 크기 만 해석 할 것이고 방향의 차이를 말할 수 없습니다. 희망이 도움이!