展会信息港展会大全

listview 实现微信删除功能向左移动item出现隐藏的删除按钮功能终于实现了,分享总结一下。(跟微信删除一样额)
来源:互联网   发布日期:2015-11-26 13:27:12   浏览:2253次  

导读:1.自定义一个listview import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ListView; public class FilpperListvew extends ListView{ private float orginX,orginY,apartX,apartY...

1.自定义一个listview

import android.content.Context;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.widget.ListView;

public class FilpperListvew extends ListView{

private float orginX,orginY,apartX,apartY,curX,curY;

private boolean delete = false;

private int itemHeight =50;

private int ratio = 1;

private FilpperDeleteListener filpperDeleterListener;

public FilpperListvew(Context context) {

super(context);

}

public FilpperListvew(Context context, AttributeSet attrs){

super(context, attrs);

}

//触发移动事件

@Override

public boolean onTouchEvent(MotionEvent ev) {

switch (ev.getAction()){

//记录按下的瞬间的坐标主要是初始化坐标数据,方便以后计算移动的距离

case MotionEvent.ACTION_DOWN:

int temp = getChildCount();

itemHeight = (temp==0)?itemHeight:getChildAt(0).getHeight();

orginX = ev.getX(0);

orginY = ev.getY(0);

curX = orginX;

curY = orginY;

if (filpperDeleterListener != null) {

filpperDeleterListener.getMoveY(curX, curY);

}

break;

//移动监听动态位置坐标的移动处理

case MotionEvent.ACTION_MOVE:

float deltaX = ev.getX(ev.getPointerCount() - 1) - orginX;

//float deltaY = Math.abs(ev.getY(ev.getPointerCount() - 1) - orginY);

apartX = ev.getX()-curX;

apartY = ev.getY()-curY;

curX = ev.getX();

curY = ev.getY();

//手指触摸的上下距离不能太大(即水平移动)

if(apartX apartY && filpperDeleterListener != null){

filpperDeleterListener.onFlipping(orginX,orginY,apartX,apartY);

}

if (Math.abs(deltaX) > this.getWidth() / ratio) {

delete = true;

} else {

delete = false;

}

}

break;

//主要是移动距离之后判断移动的位置是回原来的位置,还是移动到值得的位置(这些的操作都是的listview中实现具体的位置移动)

case MotionEvent.ACTION_UP:

if (delete && filpperDeleterListener != null) {

filpperDeleterListener.restoreView(curX, curY,true);

}

//判断是否符合移动的条件

if(!delete){

if(filpperDeleterListener != null){

filpperDeleterListener.restoreView(orginX,orginY,false);

}

}

reset();

break;

}

return super.onTouchEvent(ev);

}

public void reset(){

delete = false ;

orginX = -1 ;

orginY = -1 ;

}

public void setFilpperDeleteListener(FilpperDeleteListener f, int r) {

filpperDeleterListener = f;

ratio = r;

}

public interface FilpperDeleteListener {

//方法说明控制上下移动的位置

public void getMoveY(float moveX, float moveY);

//移动位置的具体的接口

public void onFlipping(float xPosition,float yPosition,float apartX,float apartY);

//最后的接口用来item最后的位置是否改变

public void restoreView(float x,float y, boolean tag);

}

public int getItemHeight() {

return itemHeight;

}

}

2.在activity的主布局中声明listview

3.在activity中声明listview

flipperListView = (FilpperListvew)findViewById(R.id.filpperlistview);

4.适配器的调用

myAdapter = new myAdapter(myActivity.this, myList);

if (flipperListView != null) {

flipperListView.setAdapter(myAdapter);

myAdapter.notifyDataSetChanged();

flipperListView.setFilpperDeleteListener(new FilpperDeleteListener() {

int moveX;

int moveY;

@Override

public void getMoveY(float moveXx, float moveYy) {

moveY = (int)moveYy;

moveX = (int)moveXx;

}

@Override

public void onFlipping(float xPosition, float yPosition,float apartX, float apartY) {

int index = flipperListView.pointToPosition((int)xPosition, moveY);

if(index >= 0){

int firstVisible = flipperListView.getFirstVisiblePosition();

View v = flipperListView.getChildAt(index-firstVisible);

RelativeLayout my_adapter_linear1 = (RelativeLayout) v.findViewById(R.id.my_adapter_linear1);

//临时移动几像素apartX(起始位置到终点位置)

int temp = (int)apartX;

if(my_adapter_linear1 != null){

//moveX = moveX + temp;

System.out.println("moveX======="+moveX);

System.out.println("temp: " + temp);

//手机屏幕的像素转换dip2px,超过65像素禁止向左移动

if(Math.abs(temp) = 0){

int firstVisible = flipperListView.getFirstVisiblePosition();

View v = flipperListView.getChildAt(index-firstVisible);

for (int i = 0; i

这是所有的代码片段,由于设计到版权的问题代码不是很全面不懂的我们可以共同探讨。

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港