2015-04-03 33 views
0

這是我的代碼:的Android - onTouch不工作

public class ViewSecond extends View implements View.OnTouchListener{ 

private Context context; 
private Rect tailleEcran; 
private Vibrator vibrator; 

private Paint paint; 
private Paint monPerso = new Paint(); 
private Paint flecheHaut = new Paint(); 
private Paint flecheBas = new Paint(); 
private Paint flecheGauche = new Paint(); 
private Paint flecheDroite = new Paint(); 

private Bitmap bmp, bmpFlecheHaut, bmpFlecheBas, bmpFlecheGauche, bmpFlecheDroite; 

private Carte carteActuelle; 

public ViewSecond(Context context) { 
    super(context); 
    this.context = context; 
    this.vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
    this.tailleEcran = getWindowSize(); 

    this.paint = new Paint(); 
    this.paint.setAntiAlias(true); 
    this.paint.setStyle(Paint.Style.FILL); 

    // ON S'OCCUPE DU PERSO PRINCIPAL 
    monPerso.setColor(Color.RED); 
    monPerso.setAntiAlias(false); 
    // ON S'OCCUPE DE LA CARTE 
    this.carteActuelle = new Carte(1,1,"lol"); 
    // ON S'OCCUPE DES FLECHES DIRECTIONNEL 
    this.flecheHaut = new Paint(); 
    this.flecheBas = new Paint(); 
    this.flecheGauche = new Paint(); 
    this.flecheDroite = new Paint(); 
    bmp    = BitmapFactory.decodeResource(getResources(),R.drawable.flechehaut); 
    bmpFlecheHaut = Bitmap.createScaledBitmap(bmp,(int)(tailleEcran.exactCenterX()*2)/8,(int)(tailleEcran.exactCenterY()*2)/8,false); 
    bmp    = BitmapFactory.decodeResource(getResources(),R.drawable.flechebas); 
    bmpFlecheBas = Bitmap.createScaledBitmap(bmp,(int)(tailleEcran.exactCenterX()*2)/8,(int)(tailleEcran.exactCenterY()*2)/8,false); 
    bmp    = BitmapFactory.decodeResource(getResources(),R.drawable.flechegauche); 
    bmpFlecheGauche = Bitmap.createScaledBitmap(bmp,(int)(tailleEcran.exactCenterX()*2)/8,(int)(tailleEcran.exactCenterY()*2)/8,false); 
    bmp    = BitmapFactory.decodeResource(getResources(),R.drawable.flechedroite); 
    bmpFlecheDroite = Bitmap.createScaledBitmap(bmp,(int)(tailleEcran.exactCenterX()*2)/8,(int)(tailleEcran.exactCenterY()*2)/8,false); 

} 

public boolean onTouch(View v, MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 
    if(((x>100) && (x<550)) && ((y>100) && (y<550))){ 
     this.vibrator.vibrate(500); 
    } 
    this.invalidate(); 
    return false; 
} 

public void onClick(View v) { 
    this.paint.setColor(Color.RED); 
    this.invalidate(); 
} 

protected void onDraw(Canvas canvas){ 
    canvas.drawColor(Color.BLACK); 
    canvas.drawCircle(10, 10, 10, monPerso); 
    canvas.drawBitmap(bmpFlecheHaut,(int)((tailleEcran.exactCenterX()*2)/8)+10,(int)((tailleEcran.exactCenterY()*2)-(((tailleEcran.exactCenterY()*2)/8)*2)-10),null); 
    canvas.drawBitmap(bmpFlecheBas,(int)((tailleEcran.exactCenterX()*2)/8)+10,(int)((tailleEcran.exactCenterY()*2)-(tailleEcran.exactCenterY()*2)/8),null); 
    canvas.drawBitmap(bmpFlecheGauche,0,(int)((tailleEcran.exactCenterY()*2)-(tailleEcran.exactCenterY()*2)/5.5),null); 
    canvas.drawBitmap(bmpFlecheDroite,(int)((tailleEcran.exactCenterX()*2)/4)+20,(int)((tailleEcran.exactCenterY()*2)-(tailleEcran.exactCenterY()*2)/5.5),null); 
} 

// CETTE FONCTION RENVOIE UN RECTANGE DE LA TAILLE DE L'ECRAN 
Rect getWindowSize() { 
    Rect r = new Rect(); 
    WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    display.getRectSize(r); 
    return r; 
}} 

我想要當用戶觸摸屏幕來檢測,但它不工作,我試圖把它(onTouch方法)在這裏和在活動中,但沒有做:/任何想法? 您是否看到我的drawImages?最後,我想要檢測點擊這個圖像。 Thx:D

+0

實現onTouchListener檢測觸摸... – 2015-04-03 06:20:24

+0

作爲noob,... sry。但不要太工作:/ – 2015-04-03 06:24:01

+0

如果你擴展一個View使用onTouchEvent,而不是onTouch – pskink 2015-04-03 06:28:05

回答

2

嗨,如果你想重寫公共布爾onTouch(視圖v,MotionEvent事件)。 如果你想處理整個控件,那麼返回false,否則返回true。 在你的情況下,你返回false,請更新它,並嘗試返回true。例如見下面的onTouch視圖方法。

public boolean onTouch(View view, MotionEvent event) { 
    final int X = (int) event.getRawX(); 
    final int Y = (int) event.getRawY(); 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
     case MotionEvent.ACTION_POINTER_DOWN: 
      break; 
     case MotionEvent.ACTION_POINTER_UP: 
      break; 
     case MotionEvent.ACTION_MOVE: 
      break; 
    } 
    _root.invalidate(); 
    return true; 
}} 

看到它返回true。謝謝。

0

您應該使用onTouchEvent()而不是簡單的onTouch()並返回true。如果你將返回true這意味着你已經消費了觸摸事件,並且你告訴Android它不需要進一步處理事件。

public boolean onTouchEvent(MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 
    if(((x>100) && (x<550)) && ((y>100) && (y<550))){ 
     this.vibrator.vibrate(500); 
    } 
    this.invalidate(); 
    return true; 
}