Android 侧滑按钮的实现代码

目录
  • 导入闭包
  • 创建RecyclerView子项布局文件
  • 布局代码
  • 创建RecyclerView适配器
    • 描述
    • 子项点击事件
  • 应用

Android侧滑按钮效果如下所示:

导入闭包

将以下语句倒入目录下build.gradle文件内

 implementation 'com.github.WangcWj:WeSwipe:1.0.2'
 implementation 'cn.wang.we:network:1.0.0'

将以下语句倒入项目build.gradle文件内

创建RecyclerView子项布局文件

效果描述

整体效果图,因为使用RelativeLayout布局的缘故,将侧滑按钮给覆盖了

我们接下来选中侧滑按钮,由此我们可以看见按钮的位置

将侧滑按钮释放出来,看一下效果

布局代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_marginTop="10dp">
    <TextView
        android:id="@+id/SideText"
        android:layout_width="100dp"
        android:layout_height="60dp"
        android:text="选择车位"
        android:textSize="15sp"
        android:background="#DD2248"
        android:gravity="center"
        android:textColor="#ffffff"
        android:layout_marginRight="10dp"
        android:layout_centerInParent="true"
        android:layout_alignParentRight="true"/>
    <!--大-->
    <LinearLayout
        android:id="@+id/SideLayout"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:orientation="horizontal"
        android:background="@drawable/btn_style"
        android:gravity="center"
        android:padding="10dp">
        <!--小-->
        <LinearLayout
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="5dp">
            <TextView
                android:id="@+id/SimplePlace"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="工人文化宫停车场"
                android:textColor="#000000"
                android:textSize="15sp"
                android:singleLine="true"
                android:ellipsize="end"
                />
            <TextView
                android:id="@+id/detailPlace"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="田心大道52号附件"
                android:textSize="10sp"
                android:layout_marginTop="10dp"
                android:singleLine="true"
                android:ellipsize="end"
                />
        </LinearLayout>
        <!--小-->
        <LinearLayout
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="10dp"
            android:layout_gravity="center"
            android:gravity="center">
            <ImageView
                android:id="@+id/ParkingIcon"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:src="@drawable/road_sign"
                android:scaleType="fitCenter"/>

            <TextView
                android:id="@+id/ParkingDistance"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="201m"
                android:textSize="10sp" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:gravity="center">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="空余车位:"
                android:textColor="#000000"
                android:textSize="15sp"/>
            <TextView
                android:id="@+id/ParkingNumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="10个"
                android:textColor="#ff0000"
                android:textSize="15sp"/>
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

创建RecyclerView适配器

描述

使用第三方API轮子时,不能像当初我们建立适配器一样继承一个RecyclerView.Adapter<VH>类,而要继承WeSwipeProxyAdapter<VH>抽象类
我们一般根据需求需要实现以下三个方法

 @Override
            public float getSwipeWidth() {
             //侧滑按钮的宽度
            }
            @Override
            public View needSwipeLayout() {
            //子项布局文件的最外层Layout
            }
            @Override
            public View onScreenView() {
             //子项布局文件的最外层Layout
            }

子项点击事件

//创建点击事件接口函数
public interface ParkingOnClick{
            void OnClickListener(View view,int Position);
        }

//点击事件调用
public void setOnclick(ParkingOnClick onclick) {
            this.onClick = onclick;
        }

//引入布局View中
return new ViewHolder(view,onClick);

//内部类实现点击事件
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener

//构造函数
public ViewHolder(@NonNull View itemView,ParkingOnClick Listener)
this.Listener = Listener;

//点击事件外露
@Override
            public void onClick(View v) {
                if (Listener != null) {
                    Listener.OnClickListener(v, getPosition());
                }
            }

适配器代码

public class ParkingAdapter  extends WeSwipeProxyAdapter<ParkingAdapter.ViewHolder> {
        List<ParkingData> data = new ArrayList<>(  );
        private ParkingOnClick onClick;
        public ParkingAdapter(List<ParkingData> data ){
            this.data = data;
        }
        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from( parent.getContext() ).inflate( R.layout.parking_item,parent,false );
            return new ViewHolder(view,onClick);
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            ParkingData bookingData = data.get(position);
            holder.BigPlace.setText(bookingData.getBigPlace());
            holder.SmallPlace.setText(bookingData.getSmallPlace());
            holder.ParkingNumber.setText(bookingData.getParkingNumber() + "");
            holder.Distance.setText(bookingData.getDistance());
             holder.SideText.setOnClickListener( new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d( "Da",1+"" );
                    if (onClick != null){
                        onClick.OnClickListener( v,position );
                    }
                }
            } );
        public int getItemCount() {
            return data.size();
        class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,WeSwipeHelper.SwipeLayoutTypeCallBack
        {
            private TextView BigPlace,SmallPlace,Distance,ParkingNumber,SideText;
            private LinearLayout SideLayout;
            private ParkingOnClick Listener;
            public ViewHolder(@NonNull View itemView,ParkingOnClick Listener) {
                super( itemView );
                this.Listener = Listener;
                BigPlace = itemView.findViewById( R.id.SimplePlace );
                SmallPlace = itemView.findViewById( R.id.detailPlace );
                Distance = itemView.findViewById( R.id.ParkingDistance );
                ParkingNumber = itemView.findViewById( R.id.ParkingNumber );
                SideText = itemView.findViewById( R.id.SideText );
                SideLayout = itemView.findViewById( R.id.SideLayout );
            }
            @Override
            public float getSwipeWidth() {
                return SideText.getWidth();
            public View needSwipeLayout() {
                return SideLayout;
            public View onScreenView() {
            public void onClick(View v) {
                if (Listener != null) {
                    Listener.OnClickListener(v, getPosition());
        //回调接口
        public interface ParkingOnClick{
            void OnClickListener(View view,int Position);
        //点击事件
        public void setOnclick(ParkingOnClick onclick) {
            this.onClick = onclick;
}

应用

解析xml数据

private void InitData(){
        String[] parkingArray = getResources().getStringArray(R.array.parking);
        for (int i = 0; i <parkingArray.length ; i+=4) {
            ParkingData data = new ParkingData(parkingArray[i],parkingArray[i+1],parkingArray[i+2],Integer.parseInt(parkingArray[i+3]));
            dataList.add(data);
        }
    }

绑定

WeSwipe.attach(ParkingRecycler);

private void InitRecycler(){
        LinearLayoutManager manager = new LinearLayoutManager(this);
        ParkingRecycler.setLayoutManager(manager);
        adapter = new ParkingAdapter(dataList);
        ParkingRecycler.setAdapter(adapter);
        WeSwipe.attach(ParkingRecycler);
    }

点击事件引用

adapter.setOnclick(new ParkingAdapter.ParkingOnClick() {
            @Override
            public void OnClickListener(View view, int Position) {
               //do anything...
            }
        });

原作者GitHub项目地址

https://github.com/WangcWj/SideslippingDemo

到此这篇关于Android 侧滑按钮的文章就介绍到这了,更多相关android 侧滑按钮内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 剖析Android Activity侧滑返回的实现原理

    简介 使用侧滑Activity返回很常见,例如微信就用到了.那么它是怎么实现的呢.本文带你剖析一下实现原理.我在github上找了一个star有2.6k的开源,我们分析他是怎么实现的 //star 2.6k 'com.r0adkll:slidableactivity:2.0.5' Slidr使用示例 它的使用很简单,首先要设置透明的窗口背景 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBa

  • Android实现左侧滑动菜单

    本文实例为大家分享了Android实现左侧滑动菜单的具体代码,供大家参考,具体内容如下 效果图: SlideActivity.java: package com.demo.slide;   import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window;   import com.demo.broadcast.R;   public class

  • Android实现侧滑只需一步

    先解释一下这个标题,说的是实现App侧滑返回功能只需要一行代码就能搞定,怎么做到的我待会会说.侧滑所指的就是侧滑返回,后面的介绍过程我将用侧滑表面其意.请看侧滑效果如下图: Github地址:0侵入侧滑返回 使用 在 Application 初始化 SwipeBackHelper.init(this); // 就这一步操作 本篇不打算长篇大论解释原理,只想跟大家说一下我的思考. 笔者的项目中也有侧滑返回功能,和很多侧滑的开源项目一样,需要继承swipeBackActivity基类,实现控制侧滑返

  • Android 侧滑抽屉菜单的实现代码

    侧滑抽屉菜单 前言正文一.创建项目二.添加滑动菜单三.UI美化四.添加导航视图五.菜单分类六.动态菜单七.源码 运行效果图: 前言   滑动菜单相信都不会陌生,你可能见过很多这样的文章,但我的文章会给你不一样的阅读和操作体验. 正文   写博客,自然是从创建项目开始了,这样你可以更好的知道这个过程中经历了什么. 一.创建项目   项目就命名为DrawerDemo, 绝对的手把手教学,让你清楚每一步怎么做. 然后打开app下的build.gradle,在android{}闭包中添加如下代码: //

  • Android 侧滑按钮的实现代码

    目录 导入闭包 创建RecyclerView子项布局文件 布局代码 创建RecyclerView适配器 描述 子项点击事件 应用 Android侧滑按钮效果如下所示: 导入闭包 将以下语句倒入目录下build.gradle文件内 implementation 'com.github.WangcWj:WeSwipe:1.0.2' implementation 'cn.wang.we:network:1.0.0' 将以下语句倒入项目build.gradle文件内 创建RecyclerView子项布局

  • Android侧滑效果简单实现代码

    先看看效果: 首先,导入包:compile files('libs/nineoldandroids-2.4.0.jar') r然后在main中创建一个widget包. c创建ViewDragHelper类 public class ViewDragHelper { private static final String TAG = "ViewDragHelper"; public static final int INVALID_POINTER = -1 public static f

  • Android自定义View 仿QQ侧滑菜单的实现代码

    先看看QQ的侧滑效果 分析一下 先上原理图(不知道能否表达的清楚 ==) -首先这里使用了 Android 的HorizontalScrollView 水平滑动布局作为容器,当然我们需要继承它自定义一个侧滑视图 - 这个容器里面有一个父布局(一般用LinerLayout,本demo用的是),这个父布局里面有且只有两个子控件(布局),初始状态菜单页的位置在Y轴上存在偏移这样可以就可以形成主页叠在菜单页的上方的视觉效果:然后在滑动的过程程中 逐渐修正偏移,最后菜单页和主页并排排列.原理搞清了实现起来

  • Android侧滑导航栏的实例代码

    今天学习的新内容是侧滑导航栏,我想大家肯定都比较熟悉了,因为这个效果在qq里面也有,最近一直跟室友们玩的游戏是快速让自己的头像的点赞量上千.当然我的效果跟qq是没有办法比的,因为那里面的功能是在是太强大了.下面我来展示一下我做的效果截图. 我做的界面有点丑,但是对比之前已经是有了很大的改观了.想做这样的效果的话可以ps几张比较好看的图片. 下面就是粘贴我代码的时间了. activity_main.xml <cn.edu.rjxy.activity.DragLayout xmlns:android

  • Android实现空心圆角矩形按钮的实例代码

    页面上有时会用到背景为空心圆角矩形的Button,可以通过xml绘制出来. drawrable文件夹下bg_red_hollow_rectangle.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle&qu

  • android 应用内部悬浮可拖动按钮简单实现代码

    本文介绍了android 应用内部悬浮可拖动按钮简单实现代码,分享给大家,具体如下: 可以悬浮在activity上面,在加载fragment时悬浮按钮不会消失 实现方式很简单,因为是在应用内部拖动的,只需要通过Activity获取WindowManager,然后将要拖动的view设置上去就行 设置代码: WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE); DisplayMetr

  • Android自定义控件之翻转按钮的示例代码

    本文介绍了Android自定义控件之翻转按钮的示例代码,分享给大家,具体如下: 先看一下效果 一.先定义控件的基本结构 这里我们定义一个容器,所以是在ViewGroup的基础上扩展. 简单起见,直接使用扩展自ViewGroup的LinearLayout,并将我们的控件扩展自LinearLayout. 1.按钮的基本布局如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr

  • android 实现按钮浮动在键盘上方的实例代码

    大家好,我是梦辛工作室的灵,最近在帮客户修改安卓程序时,有要求到一个按钮要浮动在键盘的上方,下面大概讲一下实现方法: 其实很简单,分三步走 第一步 获取当前屏幕的高度 Display defaultDisplay = mcontext.getWindowManager().getDefaultDisplay(); Point point = new Point(); defaultDisplay.getSize(point); height = point.y; 第二步 获取当前屏幕可见区域的高

  • android屏蔽按钮连续点击的示例代码

    android开发中,免不了会有很多按钮的点击,为防止用户故意为之,连续不停的点击按钮,造成短时间内不必要的请求过多,或者 出现多个跳转页面的问题,客户端需要对点击动作 做屏蔽处理,即屏蔽短时间内连续点击.(当然,这样也只是尽可能减少上述问题的出现,手速够快的情况下,还是会出现) 正确代码: abstract class OnMultiClickListener(private val interval: Long = MULTI_CLICK_INTERVAL): View.OnClickLis

随机推荐