2016-05-18 3 views
0

J'ai travaillé pour lisser mon coup vers le haut mais j'étais incapable de comprendre comment le faire. Je ne suis pas clair avec les termes/mots du code donné comme la réponse aux questions précédentes sur le débordement de la pile. Toute aide serait appréciée. Merci de répondre avec un code + explication. Remerciant de répondre à l'avance.Comment puis-je lisser mon glissement vers le haut?

Je le code suivant avec balayez vers le haut mais son pas lisse:

SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() { 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     String TAG = "TAG"; 
     float sensitvity = 70; 
     if (upflag == true) { 
      if ((e1.getX() - e2.getX()) > sensitvity) { 
       Log.d(TAG, "Up Left performed"); 
       return false; 
      } else if ((e2.getX() - e1.getX()) > sensitvity) { 
       Log.d(TAG, "Up Right performed"); 
       return false; 
      } 

      if (e1.getY() >= e2.getY() - 100) { 

       Log.d(TAG, "Up swipe performed"); 
       SharedPreferences preferences = getSharedPreferences(
         "com.teneleven", MODE_PRIVATE); 
       if (preferences.contains("storyid") && upflag == true) { 
        Bundle bundle = new Bundle(); 
        Intent i = new Intent(HomeActivity.this, 
          TradingRefrenceActivity.class); 
        ((AppController) getApplicationContext()) 
          .setRefDate(mtv_Date.getText().toString()); 
        bundle.putString("news_id", 
          preferences.getString("storyid", "")); 
        bundle.putString("category", 
          preferences.getString("story_category", "")); 
        bundle.putString("colorcode", 
          preferences.getString("story_colorcode", "")); 
        i.putExtras(bundle); 
        startActivity(i); 
        threadFlag = false; 
        stopHandler(); 
        overridePendingTransition(R.anim.push_up_in, 
          R.anim.push_up_out); 

        return true; 
       } 

       // if ((e1.getY() - e2.getY()) > sensitvity) { 
       // Log.d(TAG, "Up swipe performed"); 
       // SharedPreferences preferences = getSharedPreferences(
       // "com.teneleven", MODE_PRIVATE); 
       // if (preferences.contains("storyid")) { 
       // Bundle bundle = new Bundle(); 
       // Intent i = new Intent(HomeActivity.this, 
       // TradingRefrenceActivity.class); 
       // bundle.putString("news_id", 
       // preferences.getString("storyid", "")); 
       // bundle.putString("category", 
       // preferences.getString("story_category", "")); 
       // bundle.putString("slug", 
       // preferences.getString("category_slug", "")); 
       // i.putExtras(bundle); 
       // startActivity(i); 
       // 
       // overridePendingTransition(R.anim.push_up_in, 
       // R.anim.push_up_out); 
       // return super.onFling(e1, e2, velocityX, velocityY); 
       // } 

      } else if ((e2.getY() - e1.getY()) > sensitvity) { 
       Log.d(TAG, "Down swipe performed"); 
       return false; 
      } else { 
       Log.d(TAG, "None swipe performed"); 
       return false; 
      } 
      return false; 
     } 
     return false; 
    } 

}; 
+0

Pour atteindre viewpager vertical! veuillez utiliser "com.github.castorflex.verticalviewpager: library: 19.0.1" cette bibliothèque. https://github.com/castorflex/VerticalViewPager utilisez ce lien. – Praneeth

+0

@praneeth kumar dois-je l'importer dans mon code ou télécharger la bibliothèque? Si pour importer guide moi quoi écrire et si télécharger s'il vous plaît me fournir un lien direct pour télécharger coz je ne suis pas capable de comprendre quoi télécharger de ci-dessus lien donné et aussi faire un guide pour l'inclure dans mon code. –

+0

votre aide serait très utile @ praneeth kumar. –

Répondre

0

Essayez ce code, vous pouvez changer la vitesse, min et max à la distance

1) MainSwipe.class

public class MainSwipe extends AppCompatActivity implements SimpleGestureListener{ 

    private SimpleGestureFilter detector; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.swipe_screen); 
     detector = new SimpleGestureFilter(this,this); 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent me){ 
     // Call onTouchEvent of SimpleGestureFilter class 

     this.detector.onTouchEvent(me); 
     return super.dispatchTouchEvent(me); 
    } 

    @Override 
    public void onSwipe(int direction) { 

     switch (direction) { 
      case SimpleGestureFilter.SWIPE_UP : 
       Log.e("UP","UP"); 
       break; 
     } 
    } 

    @Override 
    public void onDoubleTap() { 
     Log.e("Doubletab","Doubletab"); 
    } 
} 

2) SimpleGestureFilter

public class SimpleGestureFilter extends GestureDetector.SimpleOnGestureListener { 

    public final static int SWIPE_UP = 1; 
    public final static int SWIPE_DOWN = 2; 
    public final static int SWIPE_LEFT = 3; 
    public final static int SWIPE_RIGHT = 4; 

    public final static int MODE_TRANSPARENT = 0; 
    public final static int MODE_SOLID  = 1; 
    public final static int MODE_DYNAMIC  = 2; 

    private final static int ACTION_FAKE = -13; //just an unlikely number 
    private int swipe_Min_Distance = 100; 
    private int swipe_Max_Distance = 500; 
    private int swipe_Min_Velocity = 100; 

    private int mode    = MODE_DYNAMIC; 
    private boolean running  = true; 
    private boolean tapIndicator = false; 

    private Activity context; 
    private GestureDetector detector; 
    private SimpleGestureListener listener; 

    public SimpleGestureFilter(Activity context,SimpleGestureListener sgl) { 

     this.context = context; 
     this.detector = new GestureDetector(context, this); 
     this.listener = sgl; 
    } 

    public void onTouchEvent(MotionEvent event){ 

     if(!this.running) 
      return; 

     boolean result = this.detector.onTouchEvent(event); 

     if(this.mode == MODE_SOLID) 
      event.setAction(MotionEvent.ACTION_CANCEL); 
     else if (this.mode == MODE_DYNAMIC) { 

      if(event.getAction() == ACTION_FAKE) 
       event.setAction(MotionEvent.ACTION_UP); 
      else if (result) 
       event.setAction(MotionEvent.ACTION_CANCEL); 
      else if(this.tapIndicator){ 
       event.setAction(MotionEvent.ACTION_DOWN); 
       this.tapIndicator = false; 
      } 

     } 
     //else just do nothing, it's Transparent 
    } 

    public void setMode(int m){ 
     this.mode = m; 
    } 

    public int getMode(){ 
     return this.mode; 
    } 

    public void setEnabled(boolean status){ 
     this.running = status; 
    } 

    public void setSwipeMaxDistance(int distance){ 
     this.swipe_Max_Distance = distance; 
    } 

    public void setSwipeMinDistance(int distance){ 
     this.swipe_Min_Distance = distance; 
    } 

    public void setSwipeMinVelocity(int distance){ 
     this.swipe_Min_Velocity = distance; 
    } 

    public int getSwipeMaxDistance(){ 
     return this.swipe_Max_Distance; 
    } 

    public int getSwipeMinDistance(){ 
     return this.swipe_Min_Distance; 
    } 

    public int getSwipeMinVelocity(){ 
     return this.swipe_Min_Velocity; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
          float velocityY) { 

     final float xDistance = Math.abs(e1.getX() - e2.getX()); 
     final float yDistance = Math.abs(e1.getY() - e2.getY()); 

     if(xDistance > this.swipe_Max_Distance || yDistance > this.swipe_Max_Distance) 
      return false; 

     velocityX = Math.abs(velocityX); 
     velocityY = Math.abs(velocityY); 
     boolean result = false; 

     if(velocityX > this.swipe_Min_Velocity && xDistance > this.swipe_Min_Distance){ 
      if(e1.getX() > e2.getX()) // right to left 
       this.listener.onSwipe(SWIPE_LEFT); 
      else 
       this.listener.onSwipe(SWIPE_RIGHT); 

      result = true; 
     } 
     else if(velocityY > this.swipe_Min_Velocity && yDistance > this.swipe_Min_Distance){ 
      if(e1.getY() > e2.getY()) // bottom to up 
       this.listener.onSwipe(SWIPE_UP); 
      else 
       this.listener.onSwipe(SWIPE_DOWN); 

      result = true; 
     } 

     return result; 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     this.tapIndicator = true; 
     return false; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent arg) { 
     this.listener.onDoubleTap();; 
     return true; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent arg) { 
     return true; 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent arg) { 

     if(this.mode == MODE_DYNAMIC){  // we owe an ACTION_UP, so we fake an 
      arg.setAction(ACTION_FAKE);  //action which will be converted to an ACTION_UP later. 
      this.context.dispatchTouchEvent(arg); 
     } 

     return false; 
    } 
} 

3) Interface SimpleGestureListener

public interface SimpleGestureListener { 
    void onSwipe(int direction); 
    void onDoubleTap(); 
} 
+0

cela signifie que je dois juste changer la vitesse pour lisser mon coup ?? –

+0

dont la vitesse est ma vitesse de balayage ou la vitesse de transition de diapositive? –

+0

@Shubham Nangalia oui, et sa vitesse de balayage –