2011-05-23 83 views
0

終於我明白瞭如何處理黑莓手機上的觸摸和手勢事件,但現在我有兩個問題: 1)如何在能夠處理觸摸事件的同時將圖形呈現在另一個圖形上方? 2)如何繪製簡單的矩形觸摸事件,說CLICK?黑莓圖形和觸摸事件?

我的代碼&屏幕:

package mypackage; 

import net.rim.device.api.lcdui.game.BlackBerryGameCanvas; 
import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.ui.Color; 
import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.TouchGesture; 
import net.rim.device.api.ui.VirtualKeyboard; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.Menu; 
import net.rim.device.api.ui.container.MainScreen; 
import net.rim.device.api.ui.container.VerticalFieldManager; 
import net.rim.device.api.ui.TouchEvent; 


public class MyScreen extends MainScreen 
{ 
LabelField touch_type; 

public boolean onMenu(int instance) { 
    return instance == Menu.INSTANCE_CONTEXT ? false : super.onMenu(instance); 
    } 

public MyScreen() 
{  
    super(NO_SYSTEM_MENU_ITEMS); 
    getScreen().getVirtualKeyboard().setVisibility(VirtualKeyboard.HIDE_FORCE); 


    VerticalFieldManager vf = new VerticalFieldManager(); 
    touch_type = new LabelField("SOME TEXT", FIELD_HCENTER); 
    vf.add(touch_type); 
    vf.add(new HandleTouch()); 
    add(vf); 
} 

/* 
* Implementing touch handler class 
*/ 
class HandleTouch extends Field { 

    protected void layout(int width, int height) { 
     setExtent(360, 460); 
    } 

    public void paint(Graphics graphics) { 
     graphics.drawBitmap(0, 0, this.getWidth(), this.getHeight(), Bitmap.getBitmapResource("bg.png"), 0, 0); 
    } 

    protected void drawFocus(Graphics g, boolean on) {} 

    public boolean isFocusable() { return true;} 

    public void drawBall(int x, int y) { 

    } 

    protected boolean touchEvent(TouchEvent message) { 
     switch(message.getEvent()) { 
     case TouchEvent.CLICK: 
      int x = message.getGlobalX(1); 
      int y = message.getGlobalY(1); 

      touch_type.setText("CLICK"); 
      return true; 
     case TouchEvent.DOWN: 
      //System.out.println("----------------------------->DOWN"); 
      touch_type.setText("DOWN"); 
      return true;  
     case TouchEvent.MOVE: 
      //System.out.println("----------------------------->MOVE"); 
      touch_type.setText("MOVE"); 
      return true;  
     case TouchEvent.UNCLICK: 
      //System.out.println("----------------------------->UNCLICK"); 
      touch_type.setText("UNCLICK"); 
      return true; 
     case TouchEvent.GESTURE: 
      TouchGesture gesture = message.getGesture(); 
      int gestureCode = gesture.getEvent(); 
       switch (gestureCode) { 
       case TouchGesture.HOVER: 
        //System.out.println("----------------------------->HOVER"); 
        touch_type.setText("HOVER"); 
        return true; 
       case TouchGesture.SWIPE: 
        //System.out.println("----------------------------->SWIPE"); 
        touch_type.setText("SWIPE"); 
        return true;  
       case TouchGesture.TAP: 
        //System.out.println("----------------------------->TAP"); 
        touch_type.setText("TAP"); 
        return true; 
       case TouchGesture.CLICK_REPEAT: 
        //System.out.println("----------------------------->CLICK REPEAT"); 
        touch_type.setText("CLICK REPEAT"); 
        return true; 
       case TouchGesture.DOUBLE_TAP: 
        //System.out.println("----------------------------->DOUBLE TAP"); 
        touch_type.setText("DOUBLE TAP"); 
        return true;  
      } 
     } 
     //System.out.println("PRINT ME SOMETHING IN ANY CASE"); 
     super.touchEvent(message); 
     return false; 
    } 

    public HandleTouch() { 
    } 
} 

} 

touch and gestures sample app

+0

它對我更有幫助,我是初學者,我幾乎可以理解所有事件。 TNX。 – jaleel 2012-06-05 07:24:48

回答

0

1)我不知道什麼的問題實際上是。你可以重述它或舉一個例子嗎?一旦有我能弄清楚的事情,我會更新這個答案。 2.)只需在DOWN事件上設置一個標誌,保存觸摸座標,調用invalidate(),然後在繪製方法中檢查所述標誌,如果存在,請在矩形的/圍繞座標繪製矩形。在UP事件中取消設置標誌,調用invalidate(),並且您將刪除該矩形。