首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在屏幕上自由移动ImageView

在屏幕上自由移动ImageView
EN

Stack Overflow用户
提问于 2015-12-10 21:50:34
回答 2查看 1.2K关注 0票数 1

我的布局中有一个ImageView,我想把它自由地移动到任何地方。我找到了一些关于用OnTouchListener操作移动它的教程(我已经完成了我的工作,但我不喜欢它),有些人建议使用drag and drop api (Android ),但是我不能以我想要的方式实现它(我的意思是没有目标,拖放api想要被拖动的视图的目标)

任何人都可以提供示例吗?(拖放API示例)

EN

回答 2

Stack Overflow用户

发布于 2015-12-10 21:58:34

代码语言:javascript
运行
复制
imageiew.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        drag(event, v);
        return true;
    }
});

然后

代码语言:javascript
运行
复制
       public void drag(MotionEvent event, View v)
    {

        RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();

        switch(event.getAction())
        {
           case MotionEvent.ACTION_MOVE:
           {
             params.topMargin = (int)event.getRawY() - (v.getHeight());
             params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
             v.setLayoutParams(params);
             break;
           }
           case MotionEvent.ACTION_UP:
           {
             params.topMargin = (int)event.getRawY() - (v.getHeight());
             params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
             v.setLayoutParams(params);
             break;
           }
           case MotionEvent.ACTION_DOWN:
           {
            v.setLayoutParams(params);
            break;
           }
        }

基于oh的here

票数 0
EN

Stack Overflow用户

发布于 2015-12-10 22:00:31

你可以试试这个

代码语言:javascript
运行
复制
img.setOnTouchListener(new OnTouchListener()
{
    PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down
    PointF StartPT = new PointF(); // Record Start Position of 'img'

    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        int eid = event.getAction();
        switch (eid)
        {
            case MotionEvent.ACTION_MOVE :
                PointF mv = new PointF( event.getX() - DownPT.x, event.getY() - DownPT.y);
                img.setX((int)(StartPT.x+mv.x));
                img.setY((int)(StartPT.y+mv.y));
                StartPT = new PointF( img.getX(), img.getY() );
                break;
            case MotionEvent.ACTION_DOWN :
                DownPT.x = event.getX();
                DownPT.y = event.getY();
                StartPT = new PointF( img.getX(), img.getY() );
                break;
            case MotionEvent.ACTION_UP :
                // Nothing have to do
                break;
            default :
                break;
        }
        return true;
    }
});

我从here那里得到的

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

https://stackoverflow.com/questions/34212410

复制
相关文章

相似问题

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