我想在我通过扩展Field类创建的两个自定义字段上捕获事件。 事件应该只是触摸事件。
一个字段使用graphics.drawRect(10,10,20,20)
,其他字段使用graphics.drawRect(50,50,20,20)
。
(我不会使用硬编码的值,但我在这里写的只是一个例子)。
我应该能够单独捕捉事件;这意味着不同领域的不同事件。
我的代码如下: 主屏类:
package mypackage;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.container.MainScreen;
public final class MyScreen extends MainScreen
{
CustomFieldManager cfm;
public MyScreen()
{
cfm=new CustomFieldManager();
CustomButtonField cb=new CustomButtonField(Field.FOCUSABLE,20,20,40,40);
CustomButtonField cb1=new CustomButtonField(Field.FOCUSABLE,70,70,40,40);
new CustomButtonField(cb,cb1);
cfm.add(cb);
cfm.add(cb1);
add(cfm);
}
}
Field class:
package mypackage;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.Dialog;
public class CustomButtonField extends Field {
int a,b,c,d;
CustomButtonField c1,c2;
public CustomButtonField(long style,int a,int b,int c,int d){
super(style);
this.a=a;
this.b=b;
this.c=c;
this.d=d;
}
public CustomButtonField(Object o1,Object o2){
c1=(CustomButtonField)o1;
c2=(CustomButtonField)o2;
}
public void movefirst(){
Dialog.alert("god");
}
protected void drawFocus(Graphics graphics, boolean on) {
}
protected void layout(int width, int height) {
setExtent(200, 200);
}
protected void paint(Graphics graphics) {
graphics.drawRect(a, b, c, d);
}
protected boolean navigationClick(int status, int time) {
fieldChangeNotify(0);
return true;
}
}
and manager class :
package mypackage;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.component.Dialog;
public class CustomFieldManager extends Manager {
CustomButtonField first, second;
public CustomFieldManager() {
super(Manager.NO_HORIZONTAL_SCROLL | Manager.NO_VERTICAL_SCROLL);
}
protected void sublayout(int arg0, int arg1) {
int numberOfFields = getFieldCount();
for (int i = 0; i < numberOfFields; i++) {
// Get the field.
first = (CustomButtonField) getField(i);
setPositionChild(first, 0, 0);
layoutChild(first, 110, 110);
}
setExtent(200, 200);
}
setPositionChild(first, 50, 50);
invalidate();
}
}
答案 0 :(得分:1)
如果我理解你,你只需要覆盖这个方法:
protected boolean touchEvent(TouchEvent message)
在两个自定义字段类中。并实现您想要的功能。
答案 1 :(得分:1)
我认为我们需要澄清一下。
BlackBerry Java中的一个字段被赋予一个“范围” - 基本上是一个矩形 - 并且它描绘了这个区域。当显示在屏幕上时,该字段范围内的所有“事件”应由框架自动定向到该字段。就Field而言,范围始终从0,0开始,并且扩展为Field所具有的像素数。事实上,正是这个范围定义了Field的大小。
现在在绘画中,您可以为每个场绘制您喜欢的内容(只要您保持在其范围内)。因此,如果你有一个范围为100 x 100像素的Field,那么你可以通过这样的方式绘制Field红色的左侧和右侧的蓝色:
graphics.setColor(Color.Red);
graphics.drawRect(0,0,50,100);
graphics.setColor(Color.Blue);
graohics.drawRect(50,0,100,100);
现在,如果你这样做,你可能需要单独的可检测区域 - 比如红色和蓝色区域。虽然这是可能的,你可以使用touchEvent()检测它,你会发现实际显示两个字段要容易得多,一个全红色,一个全蓝色。单独的字段使得使用标准BB方法变得更加容易,此外,还可以使用触控板滚动不同的字段。请记住,你不能在非触摸手机上使用touchevent()。
无论如何,有了这些附加信息,请您澄清一下您的问题。你有一个不同区域的场地吗?如果您有两个不同的字段,请记住您在每个字段的范围内进行绘制。