Coding Touchscreen Scrolling in Java ME

Here’s the trick how you can add touchscreen scrolling to your J2ME applications. The key to touchscreen support is the Canvas class and its’ methods pointerPressed, pointerDragged and pointerReleased. These events are called when user puts finger on the screen (pressed) and drags the finger (dragged) and finally when removes the finger (released). Each method has the x and y coordinates for the pointer action.

The scrolling is implemented with the pointerDragged event. We store the current location of the canvas to variables verticalLoc and horizontalLoc. When finger (pointer) is dragged then location is changed according to the dragged amount. Variables are used on paint method to draw the area so that it is scrolled that correctly. You can also see from the sample code how you can draw background with repeatable pattern image.

  1. public class ScrollingCanvas extends Canvas {
  2.  
  3.  // Current location
  4.  private int verticalLoc, horizontalLoc;
  5.  // Last pointer (finger) location
  6.  private int lastX, lastY;
  7.  // Background image size
  8.  private static final int IMAGE_WIDTH = 183;
  9.  private static final int IMAGE_HEIGHT = 183;
  10.  
  11.  public ScrollingCanvas() {
  12.    verticalLoc = 0;
  13.    horizontalLoc = 0;
  14.    setFullScreenMode(true);
  15.  }
  16.  
  17.  protected void paint(Graphics g) {
  18.  
  19.    // Draw background with pattern image
  20.    int x = horizontalLoc % IMAGE_WIDTH;
  21.    if(x>0) {
  22.      x -= IMAGE_WIDTH;
  23.    }
  24.    int origX = x;
  25.  
  26.    int y = verticalLoc % IMAGE_HEIGHT;
  27.    if(y>0) {
  28.      y -= IMAGE_HEIGHT;
  29.    }
  30.  
  31.    boolean verticalDone = false;
  32.    while(!verticalDone) {
  33.      boolean horizontalDone = false;
  34.      while(!horizontalDone) {
  35.        g.drawImage(
  36.          ImageRepository.getBackground(),
  37.          x, y, Graphics.LEFT|Graphics.TOP);
  38.        x += IMAGE_WIDTH;
  39.        if(x>getWidth()) {
  40.          horizontalDone = true;
  41.        }
  42.      }
  43.      x = origX;
  44.      y += IMAGE_HEIGHT;
  45.      if(y>getHeight()) {
  46.        verticalDone = true;
  47.      }
  48.    }
  49.  }
  50.  
  51.  /**
  52.  * Finger is pressed on screen
  53.  * @param x coordinate
  54.  * @param y coordinate
  55.  */
  56.  protected void pointerPressed(int x, int y) {
  57.    lastX = x;
  58.    lastY = y;
  59.  }
  60.  
  61.  /**
  62.  * Finger is dragged on screen
  63.  * @param x coordinate
  64.  * @param y coordinate
  65.  */
  66.  protected void pointerDragged(int x, int y) {
  67.    // Calculate how much we moved horizontally
  68.    int deltaHorizontal = lastX – x;
  69.    horizontalLoc -= deltaHorizontal;
  70.    lastX = x;
  71.  
  72.    // Calculate how much we moved vertically
  73.    int deltaVertical = lastY – y;
  74.    verticalLoc -= deltaVertical;
  75.    lastY = y;
  76.  
  77.    // Repaint the screen since we have scrolled
  78.    repaint();
  79.  }
  80.  
  81. }

Here is a video of running this demonstration app in Nokia N97 SDK emulator:

Twim with Touchscreen Support

Here is the new version of Twim, the mobile Twitter client, now with experimental touchscreen support. I don’t own a real touchscreen phone (yet) so I had to test touchscreen functionality with emulators like Nokia N97 SDK (v1.0) and Microemulator. There were also few good people in Twitter that tested the beta version with N97 and Nokia 5800.

New 1.14 also includes other new features like Search, Twitvid, and Follow/Unfollow support. There are also minor improvements like now you will only have to answer to less security popups when uploading files since now it is only using READ mode instead of READ/WRITE that popped up tons of popups on my E71.

Go ahead and download the latest binaries from here and start Twittering! Let me know how the touchscreen support feels like on a real device since I can’t test it myself :)

Twim v1.14

Twim v1.14

New search feature in action

Search feature - GIF animation

Getting Things Done – With Mobile App

Splash Screen

Splash screen of the new GTD application.

I like to get things done. For years I’ve followed my own action management methods but recently I’m leaning towards the David Allen‘s GTD method which he describes in his book Gettings Things Done: The Art of Stress-Free Productivity. I have used many tools to store the actions like traditional pen and paper and several desktop apps, like MiniTask and Evernote. I haven’t found any decent (and simple) mobile apps to do the same. I have used the Groceries app for this purpose but it was lacking in some areas of usability. This was the reason I created the Mobile Task Manager application.

I got good feature ideas from Jorge Ledesma who is a blogger at NokiaMobileTalk.com. The current set of features include:

  • Create actions
  • Edit actions (with 3 key)
  • Mark action as done (with fire key)
  • Purge done items
  • Create folders
  • You can add notes to actions (with 9 key)
  • You can rearrange the actions (with left/right keys)
  • Mark action as favorite (with 7 key)
  • Backup actions to CSV file

Check out the software page for additional screenshots and download links.