今天研究了一下可拖拽的ListView ,当ListView的数据不能充满整个模拟器的时候,系统自带的listview上拖下拽都不好使,显得很单调,

为了实现上拖下拽时也能实现滚动的效果,这时候就需要自定义ListView ,继承系统的ListView。

下面贴上自定义的ListView 。

package com.xiang.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView; public class DenifyMyListView extends ListView implements Runnable {
private float mFirstDownY=0f;
private int mDistance=0;
private int mStep=0;
private boolean mpostive=false;
public DenifyMyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle); }
public DenifyMyListView(Context context, AttributeSet attrs) {
super(context, attrs); }
public DenifyMyListView(Context context) {
super(context); }
@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
if(mFirstDownY == 0f && mDistance == 0)
{
mFirstDownY=ev.getY();
return true;//将事件消耗掉
} break;
case MotionEvent.ACTION_CANCEL: break;
case MotionEvent.ACTION_UP:
if(mDistance!=0)
{
mStep=1;
mpostive = ( mDistance > 0);
this.post(this);
return true;
}
mDistance=0;
mFirstDownY=0;
break; case MotionEvent.ACTION_MOVE:
/*
* 若 第一次按下的Y坐标不为0,并且移动时产生不为0的距离,就产生滑动距离一半的空白ListView,
* 显示到页面上,若按下坐标为0即相当于没有按下,没有按下滑动自然不会产生。距离还是初始值0
*/
if(mFirstDownY != 0f)
{
mDistance=(int) (mFirstDownY-ev.getY());
if ((mDistance < 0 && getFirstVisiblePosition() == 0 && getChildAt(0).getTop() == 0)
|| (mDistance > 0 && getLastVisiblePosition() == getCount() - 1))
{
mDistance /= 2;
scrollTo(0, mDistance);
return true;//同样的,消耗掉这一触摸事件
}
}
mDistance=0;
break;
default:
break;
}
return super.onTouchEvent(ev);
}
@Override
public void run() {
mDistance += ( mDistance > 0 ? -mStep : mStep);
scrollTo(0, mDistance);
if((mDistance >=0 && !mpostive)||( mpostive && mDistance <= 0))
{
scrollTo(0, 0);
mDistance=0;
mFirstDownY=0;
return;
}
mStep += 1;
this.postDelayed(this, 10);
} }

可拖拽的ListView的更多相关文章

  1. Android高级控件(六)——自定义ListView高仿一个QQ可拖拽列表的实现

    Android高级控件(六)--自定义ListView高仿一个QQ可拖拽列表的实现 我们做一些好友列表或者商品列表的时候,居多的需求可能就是需要列表拖拽了,而我们选择了ListView,也是因为使用L ...

  2. WPF中元素拖拽的两个实例

    今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结,这里主要用两个例子来说明在WPF中如何使用拖拽进行操作,元素拖拽是一个常见的操作,第一个拖拽的例子是将ListBox中的子元素拖拽到ListV ...

  3. WPF拖拽文件(拖入拖出),监控拖拽到哪个位置,类似百度网盘拖拽

    1.往wpf中拖文件 // xaml <Grid x:Name="grid_11" DragOver="Grid_11_DragOver" Drop=&q ...

  4. ListView往TreView里面拖拽

    ListView往TreView里面拖拽       unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Class ...

  5. ListView列表拖拽排序

    ListView列表拖拽排序能够參考Android源代码下的Music播放列表,他是能够拖拽的,源代码在[packages/apps/Music下的TouchInterceptor.java下]. 首 ...

  6. android ListView和GridView拖拽移位具体实现及拓展

    关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:              首 ...

  7. android ListView和GridView拖拽移位实现代码

    关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:             首先 ...

  8. QML学习笔记(七)— 实现可拖拽、编辑、选中的ListView

    鼠标单击可选中当前项,头部呈绿色显示:按压当前项可进行拖拽更换列表项位置:点击数据可以进行编辑: GitHub:八至 作者:狐狸家的鱼 这里是自己定义的model,有些字体和颜色都是使用的全局属性, ...

  9. ListView 多行拖拽排序

    核心代码:修改ListView的属性,及绑定事件 // 初始化listView1. private void InitializeListView() { listView1.AllowDrop = ...

随机推荐

  1. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  2. 解决eclipse之ADT与SDK版本不一致问题

    This Android SDK requires Android Developer Toolkit version … .Please update ADT to the latest versi ...

  3. 《精通C#》第十六章-动态类型和动态语言运行时-第一节至第四节

    在.Net4.0中引入了一个关键字dynamic,这是一个动态类型关键字.Net中还有一个关键字是var,这是一个隐式类型,可以定义本地变量,此时var所代表的实际的数据类型有编译器在初次分配时决定, ...

  4. smartform

    SMARTFORMS中一般对于固定样式,格式的某一块会选择使用TEMPLATE或者TABLE. 表:上下高度不限,以窗口高度为限.循环输出表数据,每次循环都会按照表行输出,表头和表尾可控制输出.表行中 ...

  5. vs2015打包winform程序遇到的一系列问题

    1.因为打包的时候用的是release版本的东西,所以就先把项目按release编译一下,然后一大波bug,后来修改了生成目标平台为x86,我的解决方案里面加上安装部署项目共5个(ui配置:活动rel ...

  6. Scala学习(二)

    二.Scala基础 1.变量:三种修饰符 -> ①val 常亮②var 变量③lazy val 惰性变量求值 2.类型 3.代码块 Block {exp1;exp2} 或 { exp1 exp2 ...

  7. Spring AOP基本概念

    Spring AOP基本概念 目录 Spring AOP定义 AOP基本术语 通知类型 AOP定义 AOP基本术语 切面( Aspect ):一个能横切多个对象的模块化的关注点.对Spring AOP ...

  8. AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案

    AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案 以下代码为asp.net环境下,c#语言编写的解决方案.数据用Dictiona ...

  9. N 皇后问题

    #include <set> #include <iostream> #include <string> #include <vector> #incl ...

  10. Topcoder SRM558 1000 SurroundingGame

    题意:给定一个网格,每个网格有选取代价和占据收益.每个点被占据,需要满足以下两个条件至少一个条件:1.被选取  2.邻近方格都被选取(有公共边被称为邻近)  不一定要占据所有方格,求最大收益. 第一直 ...