Codenameone 如何检测';掐灭';在容器列表中?

Codenameone 如何检测';掐灭';在容器列表中?,codenameone,Codenameone,我希望能够将容器列表中的两个容器相互挤压,以便在它们之间插入一个新的空容器。类似于iPhone应用程序“Clear”插入新任务的方式(例如,请参见本页上的第一张图片-当两个分开的容器相互挤压时,插入红色的小容器)。关于如何在Codename One中实现这一点的任何提示?通常,您会覆盖pinch方法来实现pinch-to-zoom或类似调用。但是,在这种情况下,这将不起作用,因为夹点将超出组件边界,并且不起作用 我能想到的唯一方法是覆盖表单中的pointerDragged(int[],int[]

我希望能够将容器列表中的两个容器相互挤压,以便在它们之间插入一个新的空容器。类似于iPhone应用程序“Clear”插入新任务的方式(例如,请参见本页上的第一张图片-当两个分开的容器相互挤压时,插入红色的小容器)。关于如何在Codename One中实现这一点的任何提示?

通常,您会覆盖
pinch
方法来实现pinch-to-zoom或类似调用。但是,在这种情况下,这将不起作用,因为夹点将超出组件边界,并且不起作用

我能想到的唯一方法是覆盖
表单
中的
pointerDragged(int[],int[])
方法,并在执行此操作时检测收缩运动。您可以查看pinch-in
Component.java的代码,因为这应该是一个很好的基础:

public void pointerDragged(int[] x, int[] y) {
    if (x.length > 1) {
        double currentDis = distance(x, y);

        // prevent division by 0
        if (pinchDistance <= 0) {
            pinchDistance = currentDis;
        }
        double scale = currentDis / pinchDistance;
        if (pinch((float)scale)) {
            return;
        }
    }
    pointerDragged(x[0], y[0]);
}
private double distance(int[] x, int[] y) {
    int disx = x[0] - x[1];
    int disy = y[0] - y[1];
    return Math.sqrt(disx * disx + disy * disy);
}
public void pointerDragged(int[]x,int[]y){
如果(x.长度>1){
双电流dis=距离(x,y);
//防止被0除法

如果(pinchDistance正常情况下,您将覆盖
pinch
方法以实现pinch-to-zoom或类似调用。但是,在这种情况下,这将不起作用,因为pinch将超出组件边界,并且不起作用

我能想到的唯一方法是重写
表单
中的
pointerDraged(int[],int[])
方法,并在执行此操作时检测收缩运动。您可以查看收缩
组件.java的代码,因为这应该是一个很好的基础:

public void pointerDragged(int[] x, int[] y) {
    if (x.length > 1) {
        double currentDis = distance(x, y);

        // prevent division by 0
        if (pinchDistance <= 0) {
            pinchDistance = currentDis;
        }
        double scale = currentDis / pinchDistance;
        if (pinch((float)scale)) {
            return;
        }
    }
    pointerDragged(x[0], y[0]);
}
private double distance(int[] x, int[] y) {
    int disx = x[0] - x[1];
    int disy = y[0] - y[1];
    return Math.sqrt(disx * disx + disy * disy);
}
public void pointerDragged(int[]x,int[]y){
如果(x.长度>1){
双电流dis=距离(x,y);
//防止被0除法

如果(pinchDistance)我似乎无法在模拟器(Mac电脑上)中用两个手指测试捏出-我已经看到,应该可以使用右键单击并从左上角移开(或者用两个手指在Mac电脑上滑动)但是我不能让它工作。如何正确地工作?我们不支持。我也使用Mac,我也很喜欢它,但是我们构建模拟器所依赖的Java API并没有得到那个事件。有一些“黑客”行为库,但集成它们并不理想。我认为最好的方法是最终启动即时运行/设备调试,这将使在设备上即时运行变得容易。我似乎无法在模拟器(在Mac上)中用两个手指进行测试-我已经看到,应该可以使用右键单击并从左上角移开(或者用两个手指在Mac上滑动),但我无法让它工作。如何正确地工作?我们不支持这一点。我也使用Mac,并且会喜欢这一点,但我们构建模拟器所依赖的Java API没有得到该事件。存在一些“黑客”问题但是集成它们并不理想。我认为最好的方法是最终启动即时运行/设备调试,这将使在设备上即时运行变得容易。