• Android:View随手指移动


    View的自动移动,我们可以设置动画,如之类提到的 ViewCompatAnimation

    如何是View随着手指的移动而移动呢? 

    onTouch事件实现

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                moveView(view, event.getRawX(), event.getRawY());
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return true;
    }

     

    说明:

    onTouch(View view,MotionEvent event)这个方法

    getRawX()和getRawY()获得的是相对屏幕的位置,

    getX()和getY()获得的永远是view的触摸位置坐标这两个值不会超过view的长度和宽度)。

    如是Activity的 onTouchEvent(MotionEvent event) 方法,这个时候获得的是屏幕点击位置的坐标。getRawX()与getX()访求获取的值是一样的。

     

    方法1:setLayoutParams

    /**

       * 设置View的布局属性,使得view随着手指移动 注意:view所在的布局必须使用RelativeLayout 而且不得设置居中等样式  

       */

     private void moveView(View view, float rawX, float rawY) {
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view
                .getLayoutParams();
        params.leftMargin = (int) rawX - ivMove.getWidth() / 2;
        params.topMargin = (int) rawY - topTitleHeight - ivMove.getHeight() / 2;
        view.setLayoutParams(params);
    }

     

     

    方法2:view.layout(l,t,r,b)

    /**
     * 通过layout方法,移动view 
     * 优点:对view所在的布局,要求不苛刻,不要是RelativeLayout,而且可以修改view的大小
     */
    private void moveViewByLayout(View view, int rawX, int rawY) {
        int left = rawX - ivMove.getWidth() / 2;
        int top = rawY - topTitleHeight - ivMove.getHeight() / 2;
        int width = left + view.getWidth();
        int height = top + view.getHeight();
        view.layout(left, top, width, height);
    }

     

    方法3:ScrollBy()或者ScrollTo();

    /** 

     * 在activity中实现
     * scrollBy() 相对于当前的坐标进行偏移
     * scrollTo() 相对于屏幕的左上角进行偏移
     @param event
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                currentX= (int) event.getX();
                currentY= (int) event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                int x2= (int) event.getX();
                int y2= (int) event.getY();
                container.scrollBy(currentX - x2, currentY - y2);
                currentY=y2;
                currentX=x2;
                xyValue.setText(x2+","+y2);
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return true;
    }

     





  • 相关阅读:
    P3373 线段树模板
    由AC自动机引发的灵感
    瞎子摸象序
    Outer Join的where条件
    将 转移单 自动发货
    获取某个结点的所有层
    瞎子摸象库存篇
    js修改select列表选项中的值
    JS仿flash动态切换(横向,带分页器控制,自动正反向循环轮播)
    js操作select下拉列表的一些通用代码
  • 原文地址:https://www.cnblogs.com/ut2016-progam/p/5345308.html
Copyright © 2020-2023  润新知