SwipeScreenActivity.java (corrigé)

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;
	}*/
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *