Autore Topic: catturare gesture su dei button  (Letto 225 volte)

Offline michele88

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung N7100
  • Sistema operativo:
    Windows 8.1
catturare gesture su dei button
« il: 27 Febbraio 2015, 23:18:27 CET »
0
salve ragazzi. ho una semplicissima app con 4 bottoni che occupano tutto lo schermo, ho implementato il metodo per catturare le gesture, ma se rendo visibili i bottoni il sistema non cattura le gesture, esegue solo le azioni associate ai bottoni.
se invece rendo i bottoni invisibili cattura correttamente le gesture. come fare per far funzionare entrambi?
grazie a chi si interesserà, allego codice!

Codice (Java): [Seleziona]
package com.example.provagesture;



import android.support.v4.view.GestureDetectorCompat;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.ActionMode;
import android.view.ActionMode.Callback;
import android.view.ContextMenu;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
import android.widget.Toast;



public class MainActivity extends Activity implements GestureDetector.OnGestureListener {
static final String DEBUG_TAG = "Gestures";
private GestureDetectorCompat mDetector;
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

private Button button1;
private Button button2;
private Button button3;
private Button button4;

// Called when the activity is first created.
@SuppressLint("NewApi") @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mDetector = new GestureDetectorCompat(this,this);

button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);

button1.setBackground(null);


button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                prova1(v);
               
        }
});

button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
        prova2(v);
}
});

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
        prova3(v);
}
});

button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
        prova4(v);
}
});

}



@Override
public boolean onTouchEvent(MotionEvent event){
this.mDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}


@Override
public boolean onDown(MotionEvent event) {
Log.d(DEBUG_TAG,"onDown: " + event.toString());
return true;
}

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

if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
   Toast.makeText(MainActivity.this, "Da destra a sinitra ",Toast.LENGTH_LONG).show();
//From Right to Left
return true;
}  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
        Toast.makeText(MainActivity.this, "da sisinstra a destra",Toast.LENGTH_LONG).show();
//From Left to Right
return true;
}

if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE &&Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
        Toast.makeText(MainActivity.this, "da giu a su ",Toast.LENGTH_LONG).show();
//From Bottom to Top
return true;
}  else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE &&Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
        Toast.makeText(MainActivity.this, "da su a giu ",Toast.LENGTH_LONG).show();
//From Top to Bottom
return true;
}
return false;
}

@Override
public void onLongPress(MotionEvent event) {
Log.d(DEBUG_TAG, "onLongPress: " + event.toString());
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
    float distanceY) {
Log.d(DEBUG_TAG, "onScroll: " + e1.toString()+e2.toString());
return true;
}

@Override
public void onShowPress(MotionEvent event) {
Log.d(DEBUG_TAG, "onShowPress: " + event.toString());
}

@Override
public boolean onSingleTapUp(MotionEvent event) {
Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString());
return true;
}


public void prova1(View w){
        Toast.makeText(MainActivity.this, "click prova 1 ",Toast.LENGTH_LONG).show();
}
public void prova2(View w){
        Toast.makeText(MainActivity.this, "click prova 2",Toast.LENGTH_LONG).show();
}
public void prova3(View w){
        Toast.makeText(MainActivity.this, "click prova 3",Toast.LENGTH_LONG).show();
}
public void prova4(View w){
        Toast.makeText(MainActivity.this, "click prova 4",Toast.LENGTH_LONG).show();
}

}

Offline giuseppesorce

  • Utente junior
  • **
  • Post: 92
  • Respect: +6
    • Google+
    • warpmobile_it
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6,Nexus 5,Nexus 4, Galaxy Nexus, Nexus s, Nexus One,Htc Wildfire S, Nexus 7... etc
  • Sistema operativo:
    Ubuntu 14.04
Re:catturare gesture su dei button
« Risposta #1 il: 02 Marzo 2015, 13:33:47 CET »
0
Mi sembrerebbe anche normale.. i pulsanti hanno i loro touch ed events .. e in un certo senso passami il termine hanno precedente su tutta la gesture...

Potresti usare un custom button e sovrascrivere il metodo touch.
The code is joy and passion but it has a high degree of suffering

Offline michele88

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung N7100
  • Sistema operativo:
    Windows 8.1
Re:catturare gesture su dei button
« Risposta #2 il: 02 Marzo 2015, 13:40:45 CET »
0
Ciao! Prima di tutto grazie per la risposta!
Seconda cosa.... sovrascivendo il metodo touch non catturerei le gesture che occupano lo spazio di 2 bottoni. No???
Non so se mi sono spiegato bene... ma il risultato che vorrei ottenere è pari pari quello che accade nel menu di qualsiasi terminale: con uno swipe si cambia schermata (sia verso dx che verso sx) però è possibile cliccare sui bottoni delle applicazioni per lanciarle.