【Android】侧滑按钮

news/2024/11/29 12:53:47/

【Android】侧滑按钮

效果视频

导入闭包

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

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

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

maven { url 'https://jitpack.io' }

创建RecyclerView子项布局文件

效果描述

整体效果图,因为使用RelativeLayout布局的缘故,将侧滑按钮给覆盖了
我们接下来选中侧滑按钮,由此我们可以看见按钮的位置
将侧滑按钮释放出来,看一下效果

布局代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_marginTop="10dp"><TextViewandroid: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"/><!--大--><LinearLayoutandroid: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"><!--小--><LinearLayoutandroid:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content"android:orientation="vertical"android:layout_marginLeft="5dp"><TextViewandroid: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"/><TextViewandroid: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><!--小--><LinearLayoutandroid: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"><ImageViewandroid:id="@+id/ParkingIcon"android:layout_width="30dp"android:layout_height="30dp"android:src="@drawable/road_sign"android:scaleType="fitCenter"/><TextViewandroid:id="@+id/ParkingDistance"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="201m"android:textSize="10sp" /></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:layout_gravity="center"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="空余车位:"android:textColor="#000000"android:textSize="15sp"/><TextViewandroid: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>抽象类
我们一般根据需求需要实现以下三个方法

 @Overridepublic float getSwipeWidth() {//侧滑按钮的宽度}@Overridepublic View needSwipeLayout() {//子项布局文件的最外层Layout}@Overridepublic 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;
//点击事件外露
@Overridepublic 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@Overridepublic 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);}@Overridepublic 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() {@Overridepublic void onClick(View v) {Log.d( "Da",1+"" );if (onClick != null){onClick.OnClickListener( v,position );}}} );}@Overridepublic 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 );}@Overridepublic float getSwipeWidth() {return SideText.getWidth();}@Overridepublic View needSwipeLayout() {return SideLayout;}@Overridepublic View onScreenView() {return SideLayout;}@Overridepublic 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() {@Overridepublic void OnClickListener(View view, int Position) {//do anything...}});

原作者GitHub项目地址

 https://github.com/WangcWj/SideslippingDemo

http://www.ppmy.cn/news/278608.html

相关文章

Android——侧滑面板

1.完成布局 activity——main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android…

iOS 禁止侧滑返回上个页面

1.首先把顶部左侧返回按钮隐藏掉 //隐藏返回按钮 self.navigationItem.hidesBackButton YES;2.再禁止页面左侧侧滑 //禁止页面左侧滑动返回&#xff0c;注意&#xff0c;如果仅仅需要禁止此单个页面返回&#xff0c;还需要在viewWillDisapper下开放侧滑权限 // 禁用返回手势…

简单方便的RecyclerView侧滑功能

在项目过程中遇到了一个侧滑的功能&#xff0c;感觉这个比较方便&#xff0c;也比较简单实用&#xff0c;记录一下顺便分享给大家 转载请注明出处&#xff1a;http://blog.csdn.net/android_yyf 侧滑删除用法: 一,引用库: 1,Gradle compile com.yanzhenjie:recyclerview-swipe…

android侧滑菜单实现

layout_toolbar <?xml version"1.0" encoding"utf-8"?><android.support.v7.widget.Toolbar xmlns:android"http://schemas.android.com/apk/res/android" xmlns:app"http://schemas.android.com/apk/res-auto" a…

iOS侧滑返回

现在开发的APP项目中&#xff0c;如果没有实现侧滑返回的功能&#xff0c;都不好意思拿出来秀~ 虽然官方提供了侧滑返回的API&#xff0c;但是很多开发者追求全屏侧滑返回&#xff0c;觉得官方提供的不够用。 想必大多数开发者都知道如何实现侧滑返回&#xff0c;今天&#x…

SwipeLayout侧滑

SwipeLayout框架实现侧拉删除编辑 第一步&#xff1a;添加依赖 dependencies {compile com.android.support:recyclerview-v7:21.0.0compile com.android.support:support-v4:20.compile "com.daimajia.swipelayout:library:1.2.0aar" }第二步&#xff1a;布局文件…

微信小程序 侧滑效果实现

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 先看效果图&#xff1a; 源码&#xff1a; <view wx:if{{if_show}} class{{show_centent?"show":"hide"}} /> <button bindtapbtn>展示 or 隐藏&l…

DrawerLayout实现多样侧滑菜单效果

原文作者&#xff1a;Jianan - qinxiandiqifoxmail.com 原文地址&#xff1a;http://blog.csdn.net/qinxiandiqi/article/details/73556668 版本信息&#xff1a;2017-06-21 版权声明&#xff1a;本文采用CC BY-NC-ND 4.0共享协议。允许复制和转载&#xff0c;但必须在文首显…