Herkes, bir sütunda Metin Görünümlerini gösteren bir ListActivity örneğinin basit bir örneğine sahip mi ve soldan sağa kaydırdığınızda, bu satırı yeni bir görünümde görüyor musunuz? Bu, söz konusu satırdaki verileri düzenlemek veya bu satırda daha ayrıntılı bilgi göstermek olabilir. Ben googled ve bu cevap görmedim görmedim kod shogun veya diğer sitelere başvurmayın.Android Listede Hızlıca kaydırma
cevap
Aynı problem vardı ve cevabımı burada bulamadım.
ListView öğesinde bir kaydırma işlemini algılamak ve kaydırılmış olarak işaretlemek istedim, ancak OnItemClick ve OnItemLongClick'i desteklemeye devam edin.
1 SwipeDetector sınıfı: Ben liste görünümünde tokatlamak dedektör sınıfını kullanın 2
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class SwipeDetector implements View.OnTouchListener {
public static enum Action {
LR, // Left to Right
RL, // Right to Left
TB, // Top to bottom
BT, // Bottom to Top
None // when no action was detected
}
private static final String logTag = "SwipeDetector";
private static final int MIN_DISTANCE = 100;
private float downX, downY, upX, upY;
private Action mSwipeDetected = Action.None;
public boolean swipeDetected() {
return mSwipeDetected != Action.None;
}
public Action getAction() {
return mSwipeDetected;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
mSwipeDetected = Action.None;
return false; // allow other events like Click to be processed
case MotionEvent.ACTION_UP:
upX = event.getX();
upY = event.getY();
float deltaX = downX - upX;
float deltaY = downY - upY;
// horizontal swipe detection
if (Math.abs(deltaX) > MIN_DISTANCE) {
// left or right
if (deltaX < 0) {
Log.i(logTag, "Swipe Left to Right");
mSwipeDetected = Action.LR;
return false;
}
if (deltaX > 0) {
Log.i(logTag, "Swipe Right to Left");
mSwipeDetected = Action.RL;
return false;
}
} else if (Math.abs(deltaY) > MIN_DISTANCE) { // vertical swipe
// detection
// top or down
if (deltaY < 0) {
Log.i(logTag, "Swipe Top to Bottom");
mSwipeDetected = Action.TB;
return false;
}
if (deltaY > 0) {
Log.i(logTag, "Swipe Bottom to Top");
mSwipeDetected = Action.BT;
return false;
}
}
return false;
}
return false;
}
}
:
final ListView lv = getListView();
final SwipeDetector swipeDetector = new SwipeDetector();
lv.setOnTouchListener(swipeDetector);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (swipeDetector.swipeDetected()){
// do the onSwipe action
} else {
// do the onItemClick action
}
}
});
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {
if (swipeDetector.swipeDetected()){
// do the onSwipe action
} else {
// do the onItemLongClick action
}
}
});
Bu şekilde ben 3 destekleyebilir İşte
bana çözümdür eylemler - hızlıca kaydır, tıkla, uzun tıklama ve ListView öğesi bilgilerini kullanabilirim.SONRA EKLENDİ: ListView yana
bir kaydırma hareketi yakalar, bazen zor çalmak. isSwipe bayrağını kullanarak
İştepublic boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
downY = event.getY();
mSwipeDetected = Action.None;
return false; // allow other events like Click to be processed
}
case MotionEvent.ACTION_MOVE: {
upX = event.getX();
upY = event.getY();
float deltaX = downX - upX;
float deltaY = downY - upY;
// horizontal swipe detection
if (Math.abs(deltaX) > HORIZONTAL_MIN_DISTANCE) {
// left or right
if (deltaX < 0) {
Log.i(logTag, "Swipe Left to Right");
mSwipeDetected = Action.LR;
return true;
}
if (deltaX > 0) {
Log.i(logTag, "Swipe Right to Left");
mSwipeDetected = Action.RL;
return true;
}
} else
// vertical swipe detection
if (Math.abs(deltaY) > VERTICAL_MIN_DISTANCE) {
// top or down
if (deltaY < 0) {
Log.i(logTag, "Swipe Top to Bottom");
mSwipeDetected = Action.TB;
return false;
}
if (deltaY > 0) {
Log.i(logTag, "Swipe Bottom to Top");
mSwipeDetected = Action.BT;
return false;
}
}
return true;
}
}
return false;
}
Neden böyle olsaydınız, Click gibi başka gerçek olayları geri döndürmezdiniz? – prometheuspk
@Pinhassi, HORIZONTAL_MIN_DISTANCE ve VERTICAL_MIN_DISTANCE – AndroidDev
HORIZONTAL_MIN_DISTANCE ve VERTICAL_MIN_DISTANCE değerlerinin ne olacağı, kullanıcının parmağının hareket etmesi gereken minimum mesafelerdir, böylece eylem bir tokatlamak olarak değerlendirilir. Bunu şu şekilde ayarladım: HORIZONTAL_MIN_DISTANCE = 40; VERTICAL_MIN_DISTANCE = 80; –
Burada, parmak uçlarını algılamak için kullandığım bir parçacık var. Görünümü değiştirmek için viewflipper kullanabilirsiniz.
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
} else {
return false;
}
}
private static final int SWIPE_MIN_DISTANCE = 30;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
class MyGestureDetector extends SimpleOnGestureListener {
@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
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
leftFling();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
rightFling();
}
} catch (Exception e) {
// nothing
}
return false;
}
}
Hazırlık örneği için daha fazlasını bekliyordum.Viewflippers'ı denedim, ancak bunu yaptığınızda liste boyutuyla her zaman garip bir şey. Kodunu çok hoş olsa da seviyorum. Gelecekteki denemelerimde kullanmam gerekecek, teşekkürler – JPM
(madde tıklamaları tespit etmek için onTouch tokatlamak tespiti için, ve onClickIem) iki dinleyici kullanarak çok basitleştirilmiş bir versiyonudur : düzeltmek için, ben SwipeDetector.onTouch aşağıdaki değişiklik yaptık onun isimli öncelikle bir kaydırma değildir dikkate alarak tıklama
algılama tokatlamak
olmadığını teyit kadar onClickItemListener durdurmak
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
if(!isSwipe)
{
adapter.increase(arg2);
adapter.notifyDataSetChanged();
}
}
});
Bir liste öğesi tokatlamak bu davranışa sahip internette kütüphanelerin bir sürü vardır olduğunda eylemlerle biraz düğmeleri görüntülemek istiyorsanız Swipe
listView.setOnTouchListener(new OnTouchListener() {
private int action_down_x = 0;
private int action_up_x = 0;
private int difference = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
action_down_x = (int) event.getX();
isSwipe=false; //until now
break;
case MotionEvent.ACTION_MOVE:
if(!isSwipe)
{
action_up_x = (int) event.getX();
difference = action_down_x - action_up_x;
if(Math.abs(difference)>50)
{
Log.d("action","action down x: "+action_down_x);
Log.d("action","action up x: "+action_up_x);
Log.d("action","difference: "+difference);
//swipe left or right
if(difference>0){
//swipe left
Log.d("action","swipe left");
adapter.decrease(selectedItem);
adapter.notifyDataSetChanged();
}
else{
//swipe right
Log.d("action","swipe right");
}
isSwipe=true;
}
}
break;
case MotionEvent.ACTION_UP:
Log.d("action", "ACTION_UP - ");
action_down_x = 0;
action_up_x = 0;
difference = 0;
break;
}
return false; //to allow the clicklistener to work after
}
})
algılama. İnternette bulduğum kütüphaneyi uyguladım ve çok memnunum. Kullanımı çok kolay ve çok hızlı. Orijinal kitaplığı geliştirdim ve madde tıklaması için yeni bir tıklama dinleyici ekledim. Ayrıca harika bir kütüphane (http://fortawesome.github.io/Font-Awesome/) ekledim ve şimdi yeni bir öğe başlığı ekleyebilir ve yazı tipi isminden harika bir ikon adı belirtebilirsiniz.
Here github Zaten yazı tipi boyutlarını değiştirmek için contextmenu kullanıyorum bağlantı
- 1. Yatay kaydırma - Mobil - hızlıca kaydırın?
- 2. Android ListViewİz uzun listeyi hızlıca kaydırmak için alfa kaydırma aracı
- 3. Hareket algılayıcısı (hızlıca kaydırma) üzerinde UIImageView
- 4. Hızlıca Kaydırma Görünümü Protokolü Oluşturma 2.2
- 5. UITableViewController uygulamasında hızlıca kaydırma eylemleri görünmüyor
- 6. Listede kaydırma devre dışı bırakmak mümkün mü?
- 7. android listeyi silmek için hızlıca kaydırın
- 8. Hızlıca
- 9. SplitView Bölmesi'ni açmak için hızlıca kaydırma hareketi ekleme
- 10. bir vC denetleyicisini bir FIREBASE_REF bloğundan kapatarak hızlıca kaydırma
- 11. (scala olarak) ikinci listede olmayan bir listede elemanları
- 12. Nasıl dikey kaydırma Android
- 13. kaydırma etkinliği sayfası android
- 14. Android googlemaps V2 - Kaydırma veya kaydırma kaydırma devre dışı bırakma
- 15. Listede Metin kırpma ListPopupWindow on Android
- 16. Dinamik düğme android ile genişletilmiş listede zamanlayıcı
- 17. Android CardView'da kaydırma işlevi nasıl eklenir?
- 18. Olayı kapatmak için hızlıca kaydırın
- 19. Android ScrollView ile Yavaş Kaydırma
- 20. Android ListViewKayıt kaydırma yapmıyor mu?
- 21. Android Listview kaydırma hızını yavaşlatıyor
- 22. android kaydırma sürükle ve bırak
- 23. android galeri Widget sonsuz kaydırma
- 24. Android Recycler görünümü Kaydırma çubuğu
- 25. Listede görüntü gösterme Özeti
- 26. mvc.net listede
- 27. iOS'ta kaydırma hareketi ile kaydırma efekti
- 28. Özel UIView hızlıca
- 29. Hızlıca aşağı kaydır
- 30. Coredata çok yavaş; hızlıca
ve diğer etkinlikler için bir longpress içindir. Kullanıcının, hangi satır üzerinde sürdüğü için tam veri ekranını açmak için soldan sağa kaydırmasını istiyorum. – JPM
Parçaların şimdi bu sorunu çözdüğünü tahmin ediyorum. – JPM