短視訊app製作,實現訊息列表的左滑刪除或長按刪除
短視訊app製作,實現訊息列表的左滑刪除或長按刪除
首先佈局就是一個RecyclerView
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"/>
介面卡什麼的不多說,正常寫就行
mRecyclerView = findViewById(R.id.recyclerview); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); myApr = new MyApr(); mRecyclerView.setAdapter(myApr); mDatas = new ArrayList<>();//這裡是資料 自己放我這裡就不放了 //新增長按刪除監聽 myApr.setOnremoveListnner(new MyApr.OnremoveListnner() { @Override public void ondelect(final int i) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("確定刪除?"); builder.setTitle("提示"); builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mDatas.remove(i); //更新列表 myApr.notifyDataSetChanged(); Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_LONG).show(); } }); //新增AlertDialog.Builder物件的setNegativeButton()方法 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create().show(); } }); public static class MyApr extends RecyclerView.Adapter<VH> { //建立刪除監聽介面 interface OnremoveListnner { void ondelect(int i); } private OnremoveListnner onremoveListnner; public void setOnremoveListnner(OnremoveListnner onremoveListnner) { this.onremoveListnner = onremoveListnner; } @Override public VH onCreateViewHolder(ViewGroup parent, int viewType) { return new VH(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycleview_item, parent, false)); } @Override public void onBindViewHolder(final VH holder, final int position) { //show=展示的view click=刪除view 監聽也和recyclerView的不一樣 holder.show.setText(mDatas.get(position)); //恢復狀態 holder.recyclerViewItem.apply(); holder.click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mDatas.remove(position); //更新列表 notifyDataSetChanged(); Toast.makeText(holder.itemView.getContext(), "刪除成功", Toast.LENGTH_LONG).show(); } }); //長按監聽 holder.show.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if (onremoveListnner != null) { //刪除 onremoveListnner.ondelect(position); } return true; } }); } @Override public int getItemCount() { return null == mDatas ? 0 : mDatas.size(); } }
左劃刪除我這裡跟RecyclerView是沒有關係的,佈局最關鍵,跟item有關,父容器需要自定義HorizontalScrollView,自己建立一個類就行,屬性可以自己修改
public class MyRecyclerViewItem extends HorizontalScrollView { public MyRecyclerViewItem(Context context) { super(context); init(context,null); } public MyRecyclerViewItem(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } public MyRecyclerViewItem(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } public static final String TAG=MyRecyclerViewItem.class.getSimpleName(); private boolean isLeft = true;//預設左邊 private int rightLayoutWidth; private int leftLayoutWidth; private int range; public void setRightLayoutWidth(int rightLayoutWidth) { this.rightLayoutWidth = rightLayoutWidth; } public void setLeftLayoutWidth(int leftLayoutWidth) { this.leftLayoutWidth = leftLayoutWidth; } public void setRange(int range) { this.range = range; } private void init(Context context, AttributeSet attrs) { leftLayoutWidth = getScreenSize(getContext()).widthPixels;// recyclerview 寬度 rightLayoutWidth = dp2px(getContext(),200);// 右邊佈局的寬度 range = dp2px(getContext(), 30);// 移動多少開始切換閾值 if (attrs!=null){ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyRecyclerViewItem); int indexCount = typedArray.getIndexCount(); for (int i = 0; i < indexCount; i++) { int index = typedArray.getIndex(i); if (index==R.styleable.MyRecyclerViewItem_left_width){ leftLayoutWidth = typedArray.getInteger(index, 0)==0? leftLayoutWidth : dp2px(context, typedArray.getInteger(index, 0)); } if (index==R.styleable.MyRecyclerViewItem_right_width){ rightLayoutWidth = typedArray.getInteger(index, 0)==0? rightLayoutWidth : dp2px(context, typedArray.getInteger(index, 0)); } if (index==R.styleable.MyRecyclerViewItem_move_range){ range = typedArray.getInteger(index, 0)==0? range : dp2px(context, typedArray.getInteger(index, 0)); } } typedArray.recycle(); } } //介面卡 bind 方法中呼叫 public void apply() { isLeft = true; changeLayout(); scrollTo(0, 0); } private void changeLayout() { try { ViewGroup mainLayout= (ViewGroup) getChildAt(0); ViewGroup left= (ViewGroup) mainLayout.getChildAt(0); ViewGroup right= (ViewGroup) mainLayout.getChildAt(1); if (left.getMeasuredWidth()== leftLayoutWidth && right.getMeasuredWidth()==rightLayoutWidth){ Log.i(TAG, "changeLayout: no change"); return; } ViewGroup.LayoutParams layoutParams = left.getLayoutParams(); layoutParams.width = leftLayoutWidth; left.setLayoutParams(layoutParams); ViewGroup.LayoutParams layoutParams2 = right.getLayoutParams(); layoutParams2.width = rightLayoutWidth; left.setLayoutParams(layoutParams); } catch (Exception e) { e.printStackTrace(); } } public static DisplayMetrics getScreenSize(Context context){ DisplayMetrics dm = new DisplayMetrics(); WindowManager windowManager=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getMetrics(dm); return dm; } @Override public boolean onTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { Log.i(getClass().getSimpleName(), "down"); return true; } if (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP) { Log.i(getClass().getSimpleName(), "up"); if (isLeft) { if (getScrollX() > range) { isLeft = false; smoothScrollTo(rightLayoutWidth, 0); } else { smoothScrollTo(0, 0); } } else { if (getScrollX() < (rightLayoutWidth - range)) { isLeft = true; smoothScrollTo(0, 0); } else { smoothScrollTo(rightLayoutWidth, 0); } } return true; } Log.i(getClass().getSimpleName(), "end"); return super.onTouchEvent(ev); } public static int dp2px(Context context,float dpValue) { DisplayMetrics scale = context.getResources().getDisplayMetrics(); return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, scale); } }
以上就是 短視訊app製作,實現訊息列表的左滑刪除或長按刪除,更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2901632/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 短視訊app開發,左滑刪除或長按彈出刪除選擇框APP
- 短視訊系統,長按側滑實現刪除的按鈕
- 小程式 — 實現左滑刪除效果(列表)③
- php短視訊原始碼,向左滑動顯示刪除按鈕PHP原始碼
- vue 左滑刪除功能Vue
- Vue 仿QQ左滑刪除元件Vue元件
- html裡列表滑動刪除的實現如此簡單HTML
- vue 工作專案中 實現訊息列表的 全選,反選,刪除功能Vue
- 小程式實現長按刪除圖片
- 搭建直播平臺,Android ListView 長按刪除列表項AndroidView
- 直播原始碼網站,實現對話方塊的左滑動刪除原始碼網站
- iOS開發之tableView左滑刪除的兩種方法iOSView
- 微信小程式左滑刪除功能開發案例微信小程式
- vue實現li列表的新增刪除和修改Vue
- RecyclerView 梳理:點選&長按事件、分割線、拖曳排序、滑動刪除View事件排序
- 網路負面訊息如何刪除?為什麼不能直接刪除客戶投訴的負面資訊?
- Redis 可以根據訊息儲存時長 將key 刪除嗎Redis
- 短視訊app開發,長按將視訊儲存到相簿APP
- wepy 滑動刪除功能
- 直播app開發搭建,實現圖片和影片列表展示、檢視、刪除等功能APP
- 點選刪除按鈕彈出是否刪除提示框
- 短影片app程式碼,如何實現聯表資料查詢和刪除?APP
- 直播商城平臺,購物車長按右滑出現刪除按鈕
- WPF中的ListBox怎麼新增刪除按鈕並刪除所在行
- python列表刪除專案的方法Python
- ajax編輯資訊和刪除資訊
- 短視訊app開發,介面滑動到底的幾種實現方式APP
- Mac實用技巧:如何設定長按delete實現連續刪除小技巧!Macdelete
- 原生js實現一個側滑刪除取消元件(item slide)JS元件IDE
- 短視訊app原始碼,提示以按鈕彈窗的形式實現APP原始碼
- 短視訊app製作,對於需要付費的內功,實現模糊遮罩效果APP遮罩
- linux 下vim中關於刪除某段,某行,或全部刪除的命令Linux
- Python列表刪除元素的方法有哪些?Python
- Python刪除列表中的非字母字元Python字元
- 短視訊系統原始碼,動態內容實現長按複製貼上原始碼
- jQuery列表動態增加和刪除jQuery
- 列表頁取出刪除編輯功能
- 關於刪除itunes connect的appAPP