zoukankan      html  css  js  c++  java
  • Android 画直线并实现拖动

    自定义View,在onDraw()方法中绘制一条直线,在onTouch()方法中监听手指的移动。

    public class AroundDragView extends View implements View.OnTouchListener {
        private static final String TAG = "ImageLight";
        protected int screenWidth;
        protected int screenHeight;
        protected int lastX;
     
        protected Paint paint = new Paint();
        int offset = 30;public AroundDragView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            setOnTouchListener(this);
        }
    
        public AroundDragView(Context context, AttributeSet attrs) {
            super(context, attrs);
            setOnTouchListener(this);
        }
    
        public AroundDragView(Context context) {
            super(context);
            setOnTouchListener(this);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            paint.setColor(Color.YELLOW);
            paint.setStrokeWidth(4.0f);
            paint.setStyle(Paint.Style.STROKE);
            canvas.drawLine(offset / 2, 0, offset / 2, getHeight(), paint);
        }
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    oriLeft = v.getLeft();
                    oriRight = v.getRight();
                    lastX = (int) event.getRawX();
                    break;
                case MotionEvent.ACTION_MOVE:
                    int dx = (int) event.getRawX() - lastX;
                    move(v, dx);
                    lastX = (int) event.getRawX();
                    break;
                case MotionEvent.ACTION_UP:
                    break;
            }
            invalidate();
            return false;
        }
    
        /**
         * 移动
         *
         * @param v
         * @param dx
         */
        private void move(View v, int dx) {
            int left = v.getLeft() + dx;
            int right = v.getRight() + dx;
            if (left < 100 + offset) {
                left = 100 + offset;
                right = left + v.getWidth();
            }
            if (right > screenWidth - 100) {
                right = screenWidth - 100;
                left = right - v.getWidth();
            }
            v.layout(left, 0, right, getHeight());
        }
    
    }

    将上面的View作为一个View放在XML文件中即可,例如:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center">
    
        <com.desmand.utils.AroundDragView
            android:id="@+id/video_around_drag_view"
            android:layout_width="20dp"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:clickable="true"/>
    </RelativeLayout>

    参考:http://www.cnblogs.com/a284628487/p/3367228.html

  • 相关阅读:
    EasyUI左边树菜单和datagrid分页
    Linux上安装Redis教程
    TreeMap和TreeSet的区别与联系
    将Map<String, List<Map<String,Object>>>进行排序
    Linux系统安装JDK和Tomcat
    点击添加按钮,使用ajax动态添加一行和移除一行,并且序号重新排序和数据不重复操作判断
    23种设计模式汇总整理
    SSH架构BaseDao实现
    双击Table表格td变成text修改内容
    用户找回密码功能JS验证邮箱通过点击下一步隐藏邮箱输入框并修改下一步按钮的ID
  • 原文地址:https://www.cnblogs.com/fansen/p/5056048.html
Copyright © 2011-2022 走看看