package net.chezdom.android.cours_201204_touch;
import net.chezdom.android.cours_201204_touch.R;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.support.v4.app.NavUtils;
public class SwipeScreenActivity extends Activity implements OnTouchListener {
private TextView tv;
private int MyColors[] = {Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE};
private int colidx=0;
private float savedX=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe_screen);
tv=(TextView) this.findViewById(R.id.textview1);
tv.setOnTouchListener(this);
tv.setBackgroundColor(MyColors[colidx]);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_swipe_screen, menu);
return true;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int prec=200; // Il serait bien meilleur de calculer l'angle (voir tests ci-dessous)
// sinon un petit mouvement, même parfaitement horizontal ne sera pas pris en compte
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
savedX=event.getX();
return true;
case MotionEvent.ACTION_UP:
if (savedX+prec<event.getX()) // on a bougé vers la droite
colidx=(colidx+1)%MyColors.length;
else if (savedX-prec>event.getX()) // on a bougé vers la gauche
colidx=(colidx-1+MyColors.length)%MyColors.length;
tv.setBackgroundColor(MyColors[colidx]);
return true;
}
return false;
/*
String TYPE=null;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
TYPE="DOWN";
break;
case MotionEvent.ACTION_UP:
TYPE="UP";
break;
case MotionEvent.ACTION_MOVE:
TYPE="MOVE";
break;
}
if (TYPE==null) return false;
for (int i=0;i<12;i++) {
if (i<event.getPointerCount())
Log.d("onTouch","ACTION "+i+" "+TYPE
+" ("+event.getX(i)+"/"+event.getRawX()
+","+event.getY(i)+"/"+event.getRawY()+")");
}
return true;
*/
}
/*
* Pour traiter les évènements indépendamment des objets de l'interface
*
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
String TYPE=null;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
TYPE="DOWN";
break;
case MotionEvent.ACTION_UP:
TYPE="UP";
break;
case MotionEvent.ACTION_MOVE:
TYPE="MOVE";
break;
}
if (TYPE==null)
return super.dispatchTouchEvent(event);
for (int i=0;i<12;i++) {
if (i<event.getPointerCount())
Log.d("dispatchTouch","ACTION "+i+" "+TYPE
+" ("+event.getX(i)+","+event.getY(i)+")");
}
return true;
}*/
}