首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnTouchListener (MotionEvent)动画

OnTouchListener (MotionEvent)动画
EN

Stack Overflow用户
提问于 2013-04-29 04:34:54
回答 1查看 708关注 0票数 0

我已经想出了如何使用ontouch监听器,但我仍然有一些问题。我想要动画的2D地图从鸟的角度来看,查看面积是由一个设置的坐标是计算在屏幕的中间。我想得到在事件中移动的距离,并通过这些值改变中间坐标的位置。但它似乎只起了一次作用,我对听众做错了什么吗?

代码:

Activity实现了OnTouchListener:

代码语言:javascript
复制
    @SuppressWarnings("static-access")
@Override
public boolean onTouch(View v, MotionEvent e) {
    switch (e.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startX = e.getX();
            startY = e.getY();
            gb.movedDist.put("startX", startX);
            gb.movedDist.put("startY", startY);
            break;
        case MotionEvent.ACTION_UP:
            finX = e.getX();
            finY = e.getY();
            gb.movedDist.put("finX", finX);
            gb.movedDist.put("finY", finY);
            break;
    }
    return false;
}

}

自定义SurfaceView,实现runnable:

代码语言:javascript
复制
        @Override
    public void run() {
        frame.removeCallbacks(thread);

        while(isRunning) {
            if(!holder.getSurface().isValid())
                continue;
            setMoveValues();
            handleTouch();

            Canvas canvas = holder.lockCanvas();

            p.setColor(Color.BLACK);
            for(Coordinate dC : ch.getVisibleCoords()) {
              drawLandscape(dC, canvas);
            }
            drawItems(canvas);
            drawBeings(canvas);
            drawGUI(canvas);

            holder.unlockCanvasAndPost(canvas);

// frame.postDelayed(线程,FRAME_RATE);}

代码语言:javascript
复制
    public void handleTouch() {
        int distX = (int) Math.floor(startX - finX);
        int distY = (int) Math.floor(startY - finY);
        if(distX <= 0 || distY <= 0) return;
        if(distX > sh.getTSize() && distY > sh.getTSize()) {
            int rectDistX = distX/sh.getTSize();
            int rectDistY = distY/sh.getTSize();
            boolean checkingEdges = true;
            while(checkingEdges) {
                if(rectDistX > 0 && animateMap.checkRightEdgeVisible())
                    break;
                if(rectDistX < 0 && animateMap.checkLeftEdgeVisible())
                    break;
                if(rectDistX > 0 && animateMap.checkBottomEdgeVisible())
                    break;
                if(rectDistY < 0 && animateMap.checkTopEdgeVisible())
                    break;
                animateMap.animateXYDistance(rectDistX, rectDistY);
                checkingEdges = false;
            }
        }
        else {
            animateMap.tellCoordinate(finX, finY);
        }
    }

    public void setMoveValues() {
        startX = movedDist.get("startX");
        startY = movedDist.get("startY");
        finX = movedDist.get("finX");
        finY = movedDist.get("finY");           
    }

非常感谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-04 02:35:35

对于每个有相同问题的人使用"MotionEvent.ACTION_MOVE“,它只是在你移动的整个过程中返回的值,do xou可以创建一个类似谷歌地图的地图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16267541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档