Android 滑动监听RecyclerView线性流+左右划删除+上下移动

废话不多说了,直接给大家贴代码了。具体代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="c.example.jreduch10.Recycler1Activity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv"
></android.support.v7.widget.RecyclerView>
</RelativeLayout>
<span style="font-size:18px;">package c.example.jreduch10;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import c.example.jreduch10.entity.Video;
import jp.wasabeef.recyclerview.adapters.AlphaInAnimationAdapter;
import jp.wasabeef.recyclerview.adapters.ScaleInAnimationAdapter;
public class Recycler1Activity extends AppCompatActivity {
private RecyclerView rv;
private List<Video> list;
private Adapter adapter;
private ItemTouchHelper itemTouchHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler1);
rv=(RecyclerView)findViewById(R.id.rv);
list=new ArrayList<>();
initData();
adapter=new Adapter(list);
LinearLayoutManager llm=new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
rv.setLayoutManager(llm);
// rv.setAdapter(adapter);
//动画效果
AlphaInAnimationAdapter alphaInAnimationAdapter=new AlphaInAnimationAdapter(adapter);
rv.setAdapter(new ScaleInAnimationAdapter(alphaInAnimationAdapter));
//默认动画效果
// rv.setItemAnimator(new DefaultItemAnimator());
itemTouchHelper=createItemTouchHelper();
itemTouchHelper.attachToRecyclerView(rv);
////监听事件某一行
// RecyclerViewItemListener listener=new RecyclerViewItemListener(this, new RecyclerViewItemListener.OnItemClickListener() {
// @Override
// public void OnItemClick(View item, int adapterPosition) {
// Toast.makeText(getBaseContext(),adapterPosition+"",Toast.LENGTH_SHORT).show();
// }
// });
// rv.addOnItemTouchListener(listener);
}
public ItemTouchHelper createItemTouchHelper(){
itemTouchHelper=new ItemTouchHelper(new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
//拖拽时支持的方向向上向下
int dragFlags=ItemTouchHelper.UP|itemTouchHelper.DOWN;
//滑动的时候支持的方向为左右
int swipeFlags=ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;
//必须调用makeMovementFlags()方法通知 TouchHelper支持的种类
return makeMovementFlags(dragFlags,swipeFlags);
}
//上下拖动回调次方法。
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
adapter.move(viewHolder.getAdapterPosition(),target.getAdapterPosition());
return true;
}
//左右滑动回调此方法。
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapter.delete(viewHolder.getAdapterPosition());
}
@Override
public boolean isItemViewSwipeEnabled() {
return super.isItemViewSwipeEnabled();
}
@Override
public boolean isLongPressDragEnabled() {
return super.isLongPressDragEnabled();
}
});
return itemTouchHelper;
}
public void initData(){
Video video=new Video(R.mipmap.zyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyfzyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyfzyfzyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.g,"国产","........");
list.add(video);
video=new Video(R.mipmap.ic_launcher,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyfzyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyfzyfzyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyf,"国产","........");
list.add(video);
video=new Video(R.mipmap.g,"国产","........");
list.add(video);
video=new Video(R.mipmap.ic_launcher,"国产","........");
list.add(video);
video=new Video(R.mipmap.zyf,"国产","........");
list.add(video);
}
public class Adapter extends RecyclerView.Adapter<ViewHolder>{
private List<Video> mData;
public Adapter(List<Video> mData){
this.mData=mData;
}
//左右滑动时调用此方法
public void delete(int position){
mData.remove(position);
notifyItemRemoved(position);
}
//上下拖动时调用此方法
public void move(int from,int to){
Video video=mData.remove(from);
mData.add(to>from?to-1:to,video);
notifyItemMoved(from,to);
}
@Override
public int getItemCount() {
return mData.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=getLayoutInflater().inflate(R.layout.recycle1_linear_layout,parent,false);
ViewHolder vh=new ViewHolder(view);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Video video=mData.get(position);
holder.iv.setImageResource(video.getImg());
holder.title.setText(video.getTitle());
holder.content.setText(video.getContent());
}
}
public class ViewHolder extends RecyclerView.ViewHolder{
ImageView iv;
TextView title;
TextView content;
public ViewHolder(View itemView) {
super(itemView);
iv= (ImageView) itemView.findViewById(R.id.iv);
title=(TextView)itemView.findViewById(R.id.title);
content=(TextView)itemView.findViewById(R.id.content);
//监听事件某一项
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position=getAdapterPosition();
Log.d("9999999999","uuuuu");
Toast.makeText(getBaseContext(),title.getText()+":"+position,Toast.LENGTH_SHORT).show();
}
});
}
}
}
</span> 


以上所述是小编给大家介绍的Android 滑动监听RecyclerView线性流+左右划删除+上下移动,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android中RecyclerView实现滑动删除与拖拽功能

    前言 从Android 5.0开始,谷歌推出了新的控件RecyclerView,相对于早它之前的ListView,优点多多,功能强大,也给我们的开发着提供了极大的便利,今天自己学习一下RecyclerView轻松实现滑动删除及拖拽的效果. 如下图. 相信研究过RecyclerView的同学,应该很清楚该怎么实现这样的效果,若是用ListView,这样的效果实现起来可能就有点麻烦,但是在强大的RecyclerView面前这样的的效果只需很少的代码,因为谷歌给我们提供了强大的工具类ItemTouch

  • Android RecyclerView添加上拉加载更多效果

    先看一下效果 刷新的时候是这样的: 没有更多的时候是这样的: 既然有刷新的时候有两种状态就要定义两个状态 //普通布局的type static final int TYPE_ITEM = 0; //脚布局 static final int TYPE_FOOTER = 1; 在特定的时候去显示: @Override public int getItemViewType(int position) { //如果position加1正好等于所有item的总和,说明是最后一个item,将它设置为脚布局

  • Android RecyclerView的卡顿问题的解决方法

    RecyclerView为什么会卡 RecyclerView作为v7包的新控件,自从推出就广受Android Developer们欢迎,实际上它已经取代了ListView和GridView两位老前辈的地位.然而不少亲们想必也已经发现了:没有优化过的Recycler性能很poor.上一篇博主使用的item也仅仅是一个图两串字而已,结果一滑动就卡的要命,不能忍! 那么why?回想在用ListView和GridView的adapter时,我们是用一种叫ViewHolder的自定义类(容器)来实现优化的

  • Android中RecyclerView 滑动时图片加载的优化

    RecyclerView 滑动时的优化处理,在滑动时停止加载图片,在滑动停止时开始加载图片,这里用了Glide.pause 和Glide.resume.这里为了避免重复设置增加开销,设置了一个标志变量来做判断. mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, in

  • Android 给RecyclerView添加分割线的具体步骤(分享)

    [吐槽]RecyclerView没有提供分割线的方法,想要加个线还要自己画,点击事件的监听都要自己实现,不过真的好用. 给RecyclerView添加分割线的步骤 1.新建类继承于RecyclerView.ItemDecoration,此为是抽象类: public static abstract class ItemDecoration { public void onDraw(Canvas c, RecyclerView parent, State state) { onDraw(c, par

  • Android recyclerview实现拖拽排序和侧滑删除

    Recyclerview现在基本已经替代Listview了,RecyclerView也越来越好用了  当我们有实现条目的拖拽排序和侧滑删除时  可以直接时候Recyclerview提供的API就可以直接实现了 先贴上主要代码 private void initveiw() { ArrayList<String> items = new ArrayList<>(Arrays.asList("itme1", "item2", "itme

  • android给RecyclerView加上折叠的效果示例

    RecyclerView有很高的自由度,可以说只有想不到没有做不到,真是越用越喜欢.这次用超简单的方法,让RecyclerView带上折叠的效果. 效果是这样的. 总结一下这个列表的特点,就是以下三点: 1. 重叠效果: 2. 层次感: 3. 首项的差动效果. 下面我们来一个个解决. 我们新建一个ParallaxRecyclerView,让它继承RecyclerView,并使用LinearLayoutManager作为布局管理器. 重叠效果 其实就是每一项都搭一部分在它前面那项而已.我们知道,R

  • 浅谈Android为RecyclerView增加监听以及数据混乱的小坑

    为 RecyclerView增加监听 1.在实现好的MyAdapter中写内部接口: public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) { this.onItemLongClickListener = onItemLongClickListener; } public void setOnItemClickListener(OnItemClickListener onIt

  • Android 中RecyclerView通用适配器的实现

    Android 中RecyclerView通用适配器的实现 前言: SDK的5.0版本出来已经N久了,可以说是已经经过许多人的检验了,里面的新控件不能说是非常完美,但也是非常好用了,其中最让我喜爱的就是RecyclerView了,可以完美替代ListView和GridView(除了添加headerview和footview了,网上有许多解决方式.这个下面会以一种简单的方式顺带解决,肯定为大家省心),而且可以代码动态切换这两种布局方式以及瀑布流布局.相关切换方式网上有很多,大家自行搜索,我就不贴连

  • Android 滑动监听RecyclerView线性流+左右划删除+上下移动

    废话不多说了,直接给大家贴代码了.具体代码如下所示: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_wid

  • Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置),view.ScollyBy是对view的内容的移动(移动距离) 在次activity中,当手指点击TextView ,此时是ViewGroup 响应还是TextView响应呢? 代码实践: 在activity中重写onTouchEvent(): public boolean onTouchEvent

  • Android ListView监听滑动事件的方法(详解)

    ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监听事件,可以在监听三个Action事件发生时通过MotionEvent的getX()方法或getY()方法获取到当前触摸的坐标值,来对用户的滑动方向进行判断,并可在不同的Action状态中做出相应的处理 mListView.setOnTouchListener(new View.OnTouchLis

  • Android PhoneWindowManager监听屏幕右侧向左滑动实现返回功能

    由于项目没有设计返回键,一旦进入别的应用,就无法回到桌面.只能通过串口输入input keyevent 4(返回键)来返回桌面,为了方便调试,在Framework 中监听手势,实现返回功能. 在frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager中有这么一段代码 mSystemGestures = new SystemGesturesPointerEventListener(context,

  • Android来电监听和去电监听实现代码

    我觉得写文章就得写得有用一些的,必须要有自己的思想,关于来电去电监听将按照下面三个问题展开 1.监听来电去电有什么用? 2.怎么监听,来电去电监听方式一样吗? 3.实战,有什么需要特别注意地方? 监听来电去电能干什么 1.能够对监听到的电话做个标识,告诉用户这个电话是诈骗.推销.广告什么的 2.能够针对那些特殊的电话进行自动挂断,避免打扰到用户 来电去电的监听方式(不一样的方式) 1.来电监听(PhoneStateListener) 来电监听是使用PhoneStateListener类,使用方式

  • Android ScreenLockReceiver监听锁屏功能示例

    本文实例讲述了Android ScreenLockReceiver监听锁屏功能.分享给大家供大家参考,具体如下: 监听屏幕锁屏状态(注册接受者--执行业务--注销接受者) public class AppLockService extends Service { private ActivityManager am; private KeyguardManager keyguardManager; private LockScreenReceiver receiver; @Override pu

  • Android onKeyDown监听返回键无效的解决办法

     Android onKeyDown监听返回键无效的解决办法 当我们的Activity继承了TabActivity,在该类中重写onKeyDown是监听不到返回键的, 具体解决方法如下: 重写dispatchKeyEvent /** * 退出 */ @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAc

  • Android编程监听网络连接状态改变的方法

    本文实例讲述了Android编程监听网络连接状态改变的方法.分享给大家供大家参考,具体如下: BroadcastReceiver public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //Toast.makeText(context, intent

  • Android 解决监听home键的几种方法

    Android 解决监听home键的几种方法 前言: 以下两种方法可以完美解决监听back键,home键,多任务键(最近任务键). 一.使用注册广播监听home键.多任务键 演示图 创建一个广播代码如下: class InnerRecevier extends BroadcastReceiver { final String SYSTEM_DIALOG_REASON_KEY = "reason"; final String SYSTEM_DIALOG_REASON_RECENT_APP

  • Android编程监听APK安装与删除等过程的方法

    本文实例讲述了Android编程监听APK安装与删除等过程的方法.分享给大家供大家参考,具体如下: 软件下载后的一系列动作监听:先前是通过Service监听扫描获取状态,以后用这个方法测试使用 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class getBro

随机推荐