自定义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

Android 画直线并实现拖动的更多相关文章

  1. Path画直线与弧线

    代码地址如下:http://www.demodashi.com/demo/14754.html 前言 之前讲过Paint和Canvas的基本使用,今天来介绍下Path的使用 涉及内容有: Path画直 ...

  2. 《图形学》实验五:改进的Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...

  3. 《图形学》实验四:中点Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...

  4. 《图形学》实验三:DDA算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用DDA算法画直线. 实验结果: 代码: #include <gl/glut.h> #include <math.h> ...

  5. Bresenham画直线,任意斜率

    function DrawLineBresenham(x1,y1,x2,y2) %sort by x,sure x1<x2. if x1>x2 tmp=x1; x1=x2; x2=tmp; ...

  6. 几种画直线的方法-孙鑫C++笔记

    // HDC画直线 CPoint m_ptOrigin ; void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { m_ptOrigin ...

  7. 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形

    源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685 画图工具 1.     画直线 Ø  增加‘直线’菜单项,建立类向导: Ø  对CXX ...

  8. Python使用DDA算法和中点Bresenham算法画直线

    title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...

  9. canvas学习-----画直线

    画布 1.添加canvas标签  可以通过CSS或者JS来设置canvs标签的width,height;Ps: <canvas id="cvs"></canvas ...

随机推荐

  1. 对于python WSGI的理解

    首先看看WSGI的目的是什么? 是用来定义一个统一的接口. 这个接口是针对Web服务器和python Web应用之间的. 以增加Python web应用在不同Web 服务器之间的可移植性. 也就是说如 ...

  2. apache+tomcat 负载均衡

    说明:本篇不面向无开发基础的人员,所以不会有软件下载,jdk安装等步骤.比较久远的东西了...... 1.系统环境 win7-64.jdk 2.软件列表: apache_2.2.24-x64-no-s ...

  3. VS2012格式化插件配置备份

    VS2012联机插件AStyle --style=allman --indent=spaces=4 --align-pointer=type --align-reference=type --max- ...

  4. 在安装MySQL Workbentch的时候出现如下问题,已经解决。

    mysql workbench cannot be executed from a path that contains non-ASCII characters. this problem is i ...

  5. 1012: [JSOI2008]最大数maxnumber

    单点更新,区间求最大值的题: 可以使用树状数组和线段树: #include<cstdio> #include<cstring> #include<algorithm> ...

  6. 关于Jquery中ajax方法data参数用法的总结

    data 发送到服务器的数据.将自动转换为请求字符串格式.GET 请求中将附加在 URL 后.查看 processData 选项说明以禁止此自动转换.必须为 Key/Value 格式.如果为数组,jQ ...

  7. PLSQL操作

    游标 SQL> set serveroutput onSQL> DECLARE  2    --定义游标,因为该游标中的数据需要更新,所以使用for update  3    CURSOR ...

  8. 【HDOJ】1222 Wolf and Rabbit

    最大公约数,辗转相除. #include <stdio.h> long long gcd(long long a, long long b) { if (a<b) return gc ...

  9. wcf教程

    WCF Tutorial WCF stands for Windows Communication Foundation. It is a framework for building, config ...

  10. 解决因block的损坏而导致hdfs启动后进入安全模式

    问题描述: 以单机伪分布式方式安装了hadoop2.7.1,并在该机器上安装了hive1.2.1.首先执行 sbin/start-dfs.sh 启动hdfs服务,然后执行hive,这时hive脚本启动 ...