最简单的左右滑动item实现不同效果

一、效果

二、item布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >

    <LinearLayout
            android:id="@+id/item_long"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="#FFF"
            >
        <ImageView
                android:id="@+id/img"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher"
                />
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="china cool"
                android:textSize="30sp"
                android:textColor="#000"
                android:layout_gravity="center_vertical"
                />
        <Button
                android:id="@+id/btn_delete"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:background="#CFD8DC"
                android:textSize="20sp"
                android:gravity="center"
                android:text="删除"
                />
        <Button
                android:id="@+id/btn_menu"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:background="#FF3D00"
                android:textSize="20sp"
                android:gravity="center"
                android:text="菜单"
                />
    </LinearLayout>

</LinearLayout>

三、activity

package com.qianfeng.gudao.SwipeDemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements View.OnTouchListener {
    /**
     * 需要拉动的内容
     */
    private View itemLong;
    private Button btnDelete,btnMenu;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        itemLong = findViewById(R.id.item_long);
        itemLong.setOnTouchListener(this);
        btnDelete = (Button) findViewById(R.id.btn_delete);
        btnMenu = (Button) findViewById(R.id.btn_menu);
    }

    //上一次拖拽的X坐标
    private float lastX;
    /**
     * 这个事件也是处理TouchEvent的事件的
     * @param v
     * @param event
     * @return boolean true 代表事件处理了,false 代表当前没处理
     */
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        boolean b = false;
        if (v == itemLong){
            int action = event.getAction();
            switch (action){
                case MotionEvent.ACTION_DOWN:
                    //当使用onTouchListener时,Down这个方法,返回true
                    //后面的move 才会继续传给这个接口
                    b = true;
                    lastX = 0;
                    break;
                case MotionEvent.ACTION_MOVE:
                    //进行移动
                    //凡是要实现控件的拖拽,事件的 x,y
                    //需要使用物理手机屏幕的rawX,rawY才可以进行运算
                    float rawX = event.getRawX();
                    if(lastX==0){
                        lastX = rawX;
                    }else{
                        float step = rawX-lastX;
                        //移动控件
                        //1.获取原有的位置
                        int left = itemLong.getLeft();
                        int btnDeleteWidth = btnDelete.getWidth();
                        int btnMenuWidth = btnMenu.getWidth();
                        //2.计算新值
                        float nl = left+step;
                        int newLeft = (int) nl;
                        int maxMove = btnDeleteWidth + btnMenuWidth;
                        //目的是为了体现出动态的效果
                        if(newLeft <=0 && newLeft>=-maxMove){
                            //3.代码动态设置控件的位置
                            itemLong.setLeft(newLeft);
                        }
                        //更新上一次x,确保平滑滚动
                        lastX = rawX;
                    }
                    break;
            }
        }
        return b;
    }
}

三、一个问题

如果把布局改成相对布局,就无法显示button,且获得button的宽度也是0,说明button并没有被画出来。可能是因为两个button都在无效区域,所以系统没有画他们,但是线性布局为何可以呢?这是个问题。

时间: 2024-10-02 22:24:54

最简单的左右滑动item实现不同效果的相关文章

Android SlideAndDragListView,一个可排序可滑动item的ListView

SlideAndDragListView简介 SlideAndDragListView,可排序.可滑动item显示”菜单”的ListView. SlideAndDragListView(SDLV)继承于Android的ListView,SDLV可以拖动item到SDLV的任意位置,其中包括了拖动item往上滑和往下滑:SDLV可以向右滑动item,像Android的QQ那样(QQ是向左滑),然后显现出来"菜单”之类的按钮. github地址:https://github.com/yydcdut/

WP8.1 侧边滑动Item

效果图 我看ios 和安卓上有好多类似的Item的效果,UWP上有微软官方的库,其中也有类似得效果,看样子WP8.1没有啊,顺便我的程序也是需要,我也就仿了一个. 具体思路是: 触摸控制GRId在CANvas的相对位置.滑动这个Item时候,其他已经滑动完成的ITEM关闭.只能有一个打开. 实现这个效果,至少需要以下知识点: Canvsa基础知识 触控基础知识 ObservableCollection<T>基本使用 INotifyPropertyChanged接口基本使用 咱也不罗嗦 开始 先

简单的ListView中item图片异步加载

前言: 在android开发当中,从目标地址获取图片往往都是采用异步加载的方法.当完全加载完图片后在进行显示,也有些是直接将加载的图片一点一点的显示出来. 这两个区别只是对流的处理不同而已.现在就讲讲当图片被完全获取到后在显示的方法. 一,效果图:       初始化:                                                   获取后:                         1.1,效果思路: 初始化的时候默认ImageView显示一张白色的图

简单的鼠标滑动上去图片放大Jquery特效代码

<!DOCTYPE html> <html lang="en"> <head> <meta  charset=utf-8" /> <title>文字提示</title>  <!--   引入jQuery -->  <script src="scripts/jquery1.7.js" type="text/javascript"></sc

HTMl+CSS+JQuery实现简单的图片滑动切换

1 <head> 2 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 3 <title>t图片的滑动</title> 4 <meta charset="utf-8" /> 5 <style type="text/css" > 6 *{ 7 margin:0; 8 pa

简单实现GridView的Item逐个加载和动画效果

 用布局文件实现 1. 首先在GridView控件中加入layoutAnimation属性. <GridView android:id="@+id/gridView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numColumns="3" android:gravity="center"

本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/18311877)Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果

今天还是给大家带来自定义控件的编写,自定义一个ListView的左右滑动删除Item的效果,这个效果之前已经实现过了,有兴趣的可以看下Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果,之前使用的是滑动类Scroller来实现的,但是看了下通知栏的左右滑动删除效果,确实很棒,当我们滑动Item超过一半的时候,item的透明度就变成了0,我们就知道抬起手指的时候item就被删除了,当item的透明度不为0的时候,我们抬起手指Item会回到起始位置,这样我们就知道

Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果

今天还是给大家带来自定义控件的编写,自定义一个ListView的左右滑动删除Item的效果,这个效果之前已经实现过了,有兴趣的可以看下Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果, 之前使用的是滑动类Scroller来实现的,但是看了下通知栏的左右滑动删除效果,确实很棒,当我们滑动Item超过一半的时候,item的透明度就变 成了0,我们就知道抬起手指的时候item就被删除了,当item的透明度不为0的时候,我们抬起手指Item会回到起始位置,这样我们就

RecyclerView实现条目Item拖拽排序与滑动删除

RecyclerView实现条目Item拖拽排序与滑动删除 版权声明:转载请注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 效果演示 直播视频讲解:[http://pan.baidu.com/s/1miEOtwG1 推荐大家结合我直播的视频看效果更好. 本博客源码传送门. 需求和技术分析 RecyclerView Item拖拽排序::长按RecyclerView的Item或者触摸Item的某个按钮. RecyclerView Item滑动删除: