je suis un programmeur n00b et j'ai besoin de beaucoup d'aide.
Juste pour des raisons pratiques, je veux faire une encyclopédie simple sur la flore et la faune (plantes et animaux)
Je souhaite que mon écran d'accueil soit déplaçable tout comme l'écran d'accueil d'Android} _. Balayez vers la droite pour ouvrir la page des plantes et vers la gauche pour ouvrir la page des animaux ... Je ne sais pas comment créer le effet de transition. Nous pouvons donc le faire glisser à mi-chemin pour jeter un coup d'œil sur ce qu'il y a dans la page suivante et le faire glisser pour l'annuler
Pouvez-vous partager un lien pour rendre l'écran glissable?
Merci avant
[Modifier]
@Agarwal J'ai essayé le code de votre Link2 et ça ne marche pas
J'essaie de tester si le geste détecté ou non en mettant Toast à l'intérieur de la classe interne, mais le Toast n'est pas affiché. Le Link1 est fondamentalement le même cependant.
et à partir de l'apparence du code, je pense qu'il ne peut pas faire glisser mon écran comme dans l'écran d'accueil d'Android
mon code:
public class Home extends Activity implements OnClickListener {
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
ImageButton flora, fauna;
Intent go;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initialize();
gestureDetector = new GestureDetector(new SwipeGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};
}
private void initialize() {
//find view by id to image button
//set onClickListener to image button
}
public void onClick(View v) {
//normal switch and case for each button
}
private void onLeftSwipe() {
Toast t = Toast.makeText(Home.this, "Left swipe", Toast.LENGTH_LONG);
t.show();
go = new Intent("test.apps.FLORA");
startActivity(go);
}
private void onRightSwipe() {
Toast t = Toast.makeText(Home.this, "Right swipe", Toast.LENGTH_LONG);
t.show();
go = new Intent("test.apps.FAUNA");
startActivity(go);
}
private class SwipeGestureDetector extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 50;
private static final int SWIPE_MAX_OFF_PATH = 200;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
Toast t = Toast.makeText(Home.this, "Gesture detected", Toast.LENGTH_SHORT);
t.show();
float diffAbs = Math.abs(e1.getY() - e2.getY());
float diff = e1.getX() - e2.getX();
if (diffAbs > SWIPE_MAX_OFF_PATH)
return false;
// Left swipe
if (diff > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Home.this.onLeftSwipe();
}
// Right swipe
else if (-diff > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Home.this.onRightSwipe();
}
} catch (Exception e) {
Log.e("Home", "Error on gestures");
}
return false;
}
}
}
Je me rends compte que c’est une vieille question, mais quiconque se demande pourquoi le code ci-dessus ne fonctionne pas, c’est parce qu’il n’a pas défini OnTouchListener sur un objet View. C'est pourquoi son «événement» n'est pas capté, car rien ne l'écoute.
Il pourrait ajouter cette ligne pour définir des balayages sur son bouton d'image (bien que vous souhaitiez probablement un meilleur objet View que celui-ci):
flora.setOnTouchListener(gestureListener);
Vous devez utiliser ViewPager, veuillez consulter les liens ci-dessous.
http://Android-developers.blogspot.in/2011/08/horizontal-view-swiping-with-viewpager.html
http://developer.Android.com/training/implementing-navigation/lateral.html#horizontal-paging
Détection d'activité Android
Créer une classe d'activité de base
public abstract class _SwipeActivityClass extends AppCompatActivity
{
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;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
gestureDetector = new GestureDetector( this, new SwipeDetector());
}
protected abstract void onSwipeRight();
protected abstract void onSwipeLeft();
public class SwipeDetector extends GestureDetector.SimpleOnGestureListener
{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
// Check movement along the Y-axis. If it exceeds SWIPE_MAX_OFF_PATH,
// then dismiss the swipe.
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
{
return false;
}
//toast( "start = "+String.valueOf( e1.getX() )+" | end = "+String.valueOf( e2.getX() ) );
//from left to right
if( e2.getX() > e1.getX() )
{
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
onSwipeRight();
return true;
}
}
if( e1.getX() > e2.getX() )
{
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
onSwipeLeft();
return true;
}
}
return false;
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
// TouchEvent dispatcher.
if (gestureDetector != null)
{
if (gestureDetector.onTouchEvent(ev))
// If the gestureDetector handles the event, a swipe has been
// executed and no more needs to be done.
return true;
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
return gestureDetector.onTouchEvent(event);
}
}
Ensuite, prolongez vous MainActivity from _SwipeActivityClass
implémenter des méthodes, onSwipeLeft () et onSwipeRight () pour démarrer une autre activité