This is a simple application Demonstrating Swipe or onFling() event on ListView.
you can download the source code of this project from google drive https://drive.google.com/folderview?id=0BySLpWhqmbbdSVB4M0hXb0VxcU0&usp=sharing
click on the above link ->sign into your google account ->add this to your google drive -> open it in google drive and download it.
1.Following is the MainActivity (DemoSwipe.java) of the application
>>>> To include Swipe Event in our Activity we need a class which extends SimpleOnGestureListener and implements OnTouchListener (SwipeGestureListener- in the above example). we need a constructor for this class and we need to @override the onFling(..),onTouch(..) events.Swipe event is controlled by OnFling() method. we can control LeftToRight ,RightToleft , BottomToTop, TopToBottom swipe events using this.
>>> then we need to create instance of the SwipeGestureListener
in our mainActivity (DemoSwipe - in the above Example) and set the instance to the onTochEvent of the ListView .
2. Main.xml file is given below
you can download the source code of this project from google drive https://drive.google.com/folderview?id=0BySLpWhqmbbdSVB4M0hXb0VxcU0&usp=sharing
click on the above link ->sign into your google account ->add this to your google drive -> open it in google drive and download it.
1.Following is the MainActivity (DemoSwipe.java) of the application
package com.arun.demolistviewswipe; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class DemoSwipe extends Activity { ListView lvCountry; String[] country = { "India", "USA", "Russsia", "China", "Pakistan", "Canada", "UK" }; SwipeGestureListener gestureListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lvCountry = (ListView) findViewById(R.id.lv_country); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>( DemoSwipe.this, android.R.layout.simple_list_item_1, country); lvCountry.setAdapter(arrayAdapter); gestureListener = new SwipeGestureListener(DemoSwipe.this); lvCountry.setOnTouchListener(gestureListener); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } class SwipeGestureListener extends SimpleOnGestureListener implements OnTouchListener { Context context; GestureDetector gDetector; static final int SWIPE_MIN_DISTANCE = 120; static final int SWIPE_MAX_OFF_PATH = 250; static final int SWIPE_THRESHOLD_VELOCITY = 200; public SwipeGestureListener() { super(); } public SwipeGestureListener(Context context) { this(context, null); } public SwipeGestureListener(Context context, GestureDetector gDetector) { if (gDetector == null) gDetector = new GestureDetector(context, this); this.context = context; this.gDetector = gDetector; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { final int position = lvCountry.pointToPosition( Math.round(e1.getX()), Math.round(e1.getY())); String countryName = (String) lvCountry.getItemAtPosition(position); if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { if (Math.abs(e1.getX() - e2.getX()) > SWIPE_MAX_OFF_PATH || Math.abs(velocityY) < SWIPE_THRESHOLD_VELOCITY) { return false; } if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "bottomToTop" + countryName, Toast.LENGTH_SHORT).show(); } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "topToBottom " + countryName, Toast.LENGTH_SHORT) .show(); } } else { if (Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY) { return false; } if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "swipe RightToLeft " + countryName, 5000).show(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "swipe LeftToright " + countryName, 5000).show(); } } return super.onFling(e1, e2, velocityX, velocityY); } @Override public boolean onTouch(View v, MotionEvent event) { return gDetector.onTouchEvent(event); } public GestureDetector getDetector() { return gDetector; } } }
>>>> To include Swipe Event in our Activity we need a class which extends SimpleOnGestureListener and implements OnTouchListener (SwipeGestureListener- in the above example). we need a constructor for this class and we need to @override the onFling(..),onTouch(..) events.Swipe event is controlled by OnFling() method. we can control LeftToRight ,RightToleft , BottomToTop, TopToBottom swipe events using this.
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { final int position = lvCountry.pointToPosition( Math.round(e1.getX()), Math.round(e1.getY())); String countryName = (String) lvCountry.getItemAtPosition(position); if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { if (Math.abs(e1.getX() - e2.getX()) > SWIPE_MAX_OFF_PATH || Math.abs(velocityY) < SWIPE_THRESHOLD_VELOCITY) { return false; } if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "bottomToTop" + countryName, Toast.LENGTH_SHORT).show(); } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "topToBottom " + countryName, Toast.LENGTH_SHORT) .show(); } } else { if (Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY) { return false; } if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "swipe RightToLeft " + countryName, 5000).show(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE) { Toast.makeText(DemoSwipe.this, "swipe LeftToright " + countryName, 5000).show(); } } return super.onFling(e1, e2, velocityX, velocityY); }
>>> then we need to create instance of the SwipeGestureListener
in our mainActivity (DemoSwipe - in the above Example) and set the instance to the onTochEvent of the ListView .
SwipeGestureListener gestureListener; gestureListener = new SwipeGestureListener(DemoSwipe.this); lvCountry.setOnTouchListener(gestureListener);
2. Main.xml file is given below
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/lv_country" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
are your files available for downlaod?
ReplyDeleteThanks.It is working
ReplyDelete:)
Deletee1 is always null, I can't get rid of it quite a while, so jelly to see that it once worked
ReplyDeleteGreat Demo Thanks
ReplyDeleteHow can i implement Click Event of Listview??
what is the use of SWIPE_THRESHOLD_VELOCITY = 200;
ReplyDelete