2015/04/27

Android UI AutomatorViewer (開發筆記-3)

來談談 AutomatorViewer 前端顯示的部分 - UIAutomatorViewer.java

最主要的是滑鼠點擊後可選擇特定元素事件,以及滑動時的動態選擇事件

        // 點擊選擇
        mScreenshotCanvas.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
                if (mModel != null) {
                    mModel.toggleExploreMode();
                    redrawScreenshot();
                }
            }
        });

        // 移動選擇
        mScreenshotCanvas.addMouseMoveListener(new MouseMoveListener() {
            @Override
            public void mouseMove(MouseEvent e) {
                if (mModel != null) {
                    int x = getInverseScaledSize(e.x - mDx);
                    int y = getInverseScaledSize(e.y - mDy);
                    // show coordinate
                    coordinateLabel.setText(String.format("(%d,%d)", x,y));
                    if (mModel.isExploreMode()) {
                        BasicTreeNode node = mModel.updateSelectionForCoordinates(x, y);
                        if (node != null) {
                            updateTreeSelection(node);
                        }
                    }
                }
            }
        });

可以看到重繪 Canvas 的驅動方法有 redrawScreenshot() 跟 updateTreeSelection(node),事實上這是透過註冊 PaintListener 來重繪

mScreenshotCanvas.addPaintListener(new PaintListener() {
            @Override
            public void paintControl(PaintEvent e) {
                if (mScreenshot != null) {
                        .....................

不過到這階段就是 jface 跟 swt 的事情了,跟 Android 沒太大關係就不多談。


No comments:

Post a Comment