BlackBerry - 开发类似 Cropit 的应用程序
Posted
技术标签:
【中文标题】BlackBerry - 开发类似 Cropit 的应用程序【英文标题】:BlackBerry - Develope Cropit Like Application 【发布时间】:2010-06-04 17:28:58 【问题描述】:我想开发类似裁剪的应用程序,我只想知道如何增加或减小图像上矩形的大小(多点触控事件),它定义了要裁剪的图像部分。
非常感谢
【问题讨论】:
【参考方案1】:使用 onTouchEvent,查找 DOWN 和 MOVE 事件以正确绘制选择。
要让模拟器多点触控:Alt+T,然后用鼠标左键控制手指 1,用鼠标右键控制手指 2。
代码示例:
class Scr extends MainScreen
XYPoint mLeftUp = null;
XYPoint mRightBottom = null;
XYPoint mCoursor = null;
// Bitmap bitmap = Bitmap.getBitmapResource("wallpaper_bold.jpg");
Bitmap bitmap = Bitmap.getBitmapResource("wallpaper_storm.jpg");
BitmapField mBitmapField = new BitmapField(bitmap);
public Scr()
add(mBitmapField);
mCoursor = new XYPoint(bitmap.getWidth() >> 1,
bitmap.getHeight() >> 1);
protected void makeMenu(Menu menu, int instance)
super.makeMenu(menu, instance);
if (mLeftUp != null && mRightBottom != null)
menu.add(new MenuItem("crop", 0, 0)
public void run()
XYRect rect = null;
if (mLeftUp.x > mRightBottom.x
&& mLeftUp.y > mRightBottom.y)
rect = new XYRect(mRightBottom, mLeftUp);
else
rect = new XYRect(mLeftUp, mRightBottom);
Bitmap crop = cropImage(bitmap, rect.x, rect.y,
rect.width, rect.height);
mBitmapField.setBitmap(crop);
mCoursor = new XYPoint(crop.getWidth() >> 1, crop
.getHeight() >> 1);
mLeftUp = null;
mRightBottom = null;
invalidate();
);
menu.add(new MenuItem("reset", 0, 0)
public void run()
mBitmapField.setBitmap(bitmap);
mCoursor = new XYPoint(bitmap.getWidth() >> 1, bitmap
.getHeight() >> 1);
invalidate();
);
protected void paint(Graphics graphics)
super.paint(graphics);
if (mCoursor != null)
graphics.setColor(Color.RED);
graphics.drawLine(mCoursor.x - 4, mCoursor.y - 4,
mCoursor.x + 4, mCoursor.y + 4);
graphics.drawLine(mCoursor.x + 4, mCoursor.y - 4,
mCoursor.x - 4, mCoursor.y + 4);
if (mLeftUp != null && mRightBottom != null)
graphics.setColor(Color.RED);
graphics.drawPoint(mLeftUp.x, mLeftUp.y);
graphics.drawPoint(mRightBottom.x, mRightBottom.y);
graphics.drawPoint(mLeftUp.x, mRightBottom.y);
graphics.drawPoint(mRightBottom.x, mLeftUp.y);
graphics.setColor(Color.WHITESMOKE);
XYRect redRect = null;
if (mLeftUp.x > mRightBottom.x && mLeftUp.y > mRightBottom.y)
redRect = new XYRect(mRightBottom, mLeftUp);
else
redRect = new XYRect(mLeftUp, mRightBottom);
graphics.drawRect(redRect.x, redRect.y, redRect.width,
redRect.height);
// comment block for Bold
protected boolean touchEvent(TouchEvent message)
int x1 = message.getX(1);
int y1 = message.getY(1);
int x2 = message.getX(2);
int y2 = message.getY(2);
switch (message.getEvent())
case TouchEvent.DOWN:
if (x1 != -1)
mLeftUp = new XYPoint(x1, y1);
else if (x2 != -1)
mRightBottom = new XYPoint(x2, y2);
break;
case TouchEvent.MOVE:
if (x1 != -1)
mLeftUp = new XYPoint(x1, y1);
if (x2 != -1)
mRightBottom = new XYPoint(x2, y2);
break;
case TouchEvent.UNCLICK:
mLeftUp = null;
mRightBottom = null;
default:
break;
invalidate();
return true;
protected boolean navigationMovement(int dx, int dy, int status,
int time)
moveCoursor(dx, dy);
return true;
private void moveCoursor(int dx, int dy)
mCoursor.translate(dx, dy);
if (mLeftUp != null)
mRightBottom = new XYPoint(mCoursor);
invalidate();
protected boolean navigationUnclick(int status, int time)
clickCoursor();
return true;
private void clickCoursor()
if (mLeftUp != null && mLeftUp.equals(mCoursor))
mLeftUp = null;
mRightBottom = null;
else
mLeftUp = new XYPoint(mCoursor);
invalidate();
public static Bitmap cropImage(Bitmap image, int x, int y, int width,
int height)
Bitmap result = new Bitmap(width, height);
Graphics g = Graphics.create(result);
g.drawBitmap(0, 0, width, height, image, x, y);
return result;
【讨论】:
以上是关于BlackBerry - 开发类似 Cropit 的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
[当套接字可用时使用HTTP长轮询(例如iPhone,Blackberry)