自定义一个view 继承LinearLayout:
代码:
public class SwipeLayout extends LinearLayout { private ViewDragHelper viewDragHelper; private View contentView; private View actionView; private int dragDistance; private final double AUTO_OPEN_SPEED_LIMIT = 800.0; private int draggedX; public SwipeLayout(Context context) { this(context, null); } public SwipeLayout(Context context, AttributeSet attrs) { this(context, attrs, -1); } public SwipeLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); viewDragHelper = ViewDragHelper.create(this, new DragHelperCallback()); } @Override protected void onFinishInflate() { contentView = getChildAt(0); actionView = getChildAt(1); actionView.setVisibility(GONE); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); dragDistance = actionView.getMeasuredWidth(); } private class DragHelperCallback extends ViewDragHelper.Callback { @Override public boolean tryCaptureView(View view, int i) { return view == contentView || view == actionView; } @Override public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { draggedX = left; if (changedView == contentView) { actionView.offsetLeftAndRight(dx); } else { contentView.offsetLeftAndRight(dx); } if (actionView.getVisibility() == View.GONE) { actionView.setVisibility(View.VISIBLE); } invalidate(); } @Override public int clampViewPositionHorizontal(View child, int left, int dx) { if (child == contentView) { final int leftBound = getPaddingLeft(); final int minLeftBound = -leftBound - dragDistance; final int newLeft = Math.min(Math.max(minLeftBound, left), 0); return newLeft; } else { final int minLeftBound = getPaddingLeft() + contentView.getMeasuredWidth() - dragDistance; final int maxLeftBound = getPaddingLeft() + contentView.getMeasuredWidth() + getPaddingRight(); final int newLeft = Math.min(Math.max(left, minLeftBound), maxLeftBound); return newLeft; } } @Override public int getViewHorizontalDragRange(View child) { return dragDistance; } @Override public void onViewReleased(View releasedChild, float xvel, float yvel) { super.onViewReleased(releasedChild, xvel, yvel); boolean settleToOpen = false; if (xvel > AUTO_OPEN_SPEED_LIMIT) { settleToOpen = false; } else if (xvel < -AUTO_OPEN_SPEED_LIMIT) { settleToOpen = true; } else if (draggedX <= -dragDistance / 2) { settleToOpen = true; } else if (draggedX > -dragDistance / 2) { settleToOpen = false; } final int settleDestX = settleToOpen ? -dragDistance : 0; viewDragHelper.smoothSlideViewTo(contentView, settleDestX, 0); ViewCompat.postInvalidateOnAnimation(SwipeLayout.this); } } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(viewDragHelper.shouldInterceptTouchEvent(ev)) { return true; } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { viewDragHelper.processTouchEvent(event); return true; } @Override public void computeScroll() { super.computeScroll(); if(viewDragHelper.continueSettling(true)) { ViewCompat.postInvalidateOnAnimation(this); } } }2:Mainactivity代码:
public class MainActivity extends AppCompatActivity { private RecyclerView rlv; private ArrayList<String> list; private RecyclerView.LayoutManager LayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initAdapter(); } /** * 控件 */ private void initView() { rlv = (RecyclerView) findViewById(R.id.rlv); } /** * 数据 */ private void initData() { list = new ArrayList<>(); for (int i = 0; i < 50; i++) { list.add("5.0新特性测试" + i); } } /** * 适配器 */ private void initAdapter() { ItemAdapter ItemAdapter = new ItemAdapter(this, list); LayoutManager = new GridLayoutManager(this, 1); rlv.setLayoutManager(LayoutManager); rlv.setAdapter(ItemAdapter); } } 3:主布局:有问题可以发我邮箱[email protected]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/rlv" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>4:Item布局:<com.lhz.swipelayoutexample.SwipeLayout5:适配器:android:layout_height="200dp" android:layout_width="match_parent" > <LinearLayout android:background="#ffffff" android:layout_height="50dp" android:layout_width="match_parent"> <TextView android:id="@+id/item_tv" android:layout_gravity="center_vertical" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingLeft="20dp" android:text="@string/hello_world" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_height="50dp" android:layout_width="150dp"> <RelativeLayout android:background="#ff0000" android:clickable="true" android:id="@+id/delete_button" android:layout_height="50dp" android:layout_width="50dp"> <View android:background="@drawable/trash" android:layout_centerInParent="true" android:layout_height="28dp" android:layout_width="28dp" /> </RelativeLayout> <RelativeLayout android:background="#c2c2c2" android:clickable="true" android:id="@+id/view_button" android:layout_height="50dp" android:layout_width="50dp"> <View android:background="@drawable/magnifier" android:layout_centerInParent="true" android:layout_height="28dp" android:layout_width="28dp" /> </RelativeLayout> <RelativeLayout android:background="#aaffff" android:clickable="true" android:id="@+id/star_button" android:layout_height="50dp" android:layout_width="50dp"> <View android:background="@drawable/star" android:layout_centerInParent="true" android:layout_height="28dp" android:layout_width="28dp" /> </RelativeLayout> </LinearLayout></com.lhz.swipelayoutexample.SwipeLayout>xmlns:android="http://schemas.android.com/apk/res/android"package com.github.lzyzsd.swipelayoutexample; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.github.lzyzsd.viewdraghelperdemo.R; import java.util.ArrayList; /** *lhz * 2016.4.21 */ public class ItemAdapter extends RecyclerView.Adapter implements View.OnClickListener { private ArrayList<String> list; private Context Context; public ItemAdapter(Context Context, ArrayList<String> list) { this.Context = Context; this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(Context, R.layout.item_list, null); Demo Demo = new Demo(inflate); return Demo; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { Demo Demo = (ItemAdapter.Demo) holder; Demo.item_tv.setText(list.get(position)); Demo.delete_button.setOnClickListener(this); Demo.view_button.setOnClickListener(this); Demo.star_button.setOnClickListener(this); } @Override public int getItemCount() { return list.size(); } /** * 后面逻辑自己处理 * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.delete_button: Toast.makeText(Context, "delete_button", Toast.LENGTH_SHORT).show(); break; case R.id.view_button: Toast.makeText(Context, "view_button", Toast.LENGTH_SHORT).show(); break; case R.id.star_button: Toast.makeText(Context, "star_button", Toast.LENGTH_SHORT).show(); break; } } private class Demo extends RecyclerView.ViewHolder { private final RelativeLayout star_button; private final RelativeLayout view_button; private final RelativeLayout delete_button; private final TextView item_tv; public Demo(View itemView) { super(itemView); delete_button = (RelativeLayout) itemView.findViewById(R.id.delete_button); view_button = (RelativeLayout) itemView.findViewById(R.id.view_button); star_button = (RelativeLayout) itemView.findViewById(R.id.star_button); item_tv = (TextView) itemView.findViewById(R.id.item_tv); } } }
文章浏览阅读447次。原标题:iOS12.1.2信号差无法上网怎么办?4G断流解决方法今年的新iPhone从发售到现在都深陷信号门的舆论,此前有人将锅甩给英特尔的基带,但是外媒曾经对这款基带做过严谨的测试,发现基带性能是正常的。这也就意味着,新iPhone信号差是苹果优化不到位造成的。果不其然,在新机发售一段时间之后,苹果便推送了几个新的系统固件,大大改善了信号问题。不过解决了问题的同时,新系统也带来了新的信号毛病。 ..._ios12.1.2无volte选项
文章浏览阅读3.6k次。跨域资源共享(CORS)跨域资源共享(cors)可以放宽浏览器的同源策略,可以通过浏览器让不同的网站和不同的服务器之间通信。1.同源策略同源策略在浏览器安全中是一种非常重要的概念,大量的客户端脚本支持同源策略,比如JavaScript。同源策略允许运行在页面的脚本可以无限制的访问同一个网站(同源)中其他脚本的任何方法和属性。当不同网站页面(非同源)的脚本试图去互相访问的时候,大多数的方法和..._cors漏洞危害
文章浏览阅读3.7k次,点赞11次,收藏8次。PyTorch学习笔记:torch.cat与torch.stack——张量的拼接torch.cat()torch.stack()cat与stack的区别torch.cat()torch.cat(tensors, dim=0, *, out=None) → Tensor官方解释:利用给定的维度连接给定的张量序列(cat代表concatenate),所有张量必须具有相同的形状(连接维度除外)或为空。相当于按指定维度将张量序列进行拼接参数解释:tensors:要连接的张量序列(元组tuple或者列_先torch.cat再torch.stack
文章浏览阅读1.8k次。from: http://www.eeworld.com.cn/qcdz/article_2017112520552.html据报道,激光雷达(LiDAR)与其它传感器技术(摄像头、雷达和超声波)的相互竞争增加了对传感器融合的需求,同时也要求对光电探测器、光源和MEMS微镜的仔细甄选。随着传感器技术、成像技术、雷达、LiDAR、电子设备和人工智能技术的进步,数十种先进驾驶辅助系_光电探测和激光探测的区别
文章浏览阅读207次。相信很多同学学会了git或者github以后都不知道怎么跟windows上的pycharm连在一起工作,那么下面我们开始介绍简单的安装和使用方法。一、安装1、首先你的有一个github的账户。注册什么的就不在这里说了,百度一大片。2、配置pycharm的github信息,一定要点击test测试。下载git的安装包,下载完成以后下一步下一步的安装完成即可。3、我使用的是默认路径安装,C:\Progr...
文章浏览阅读550次。第5章总线及其形成1.微处理器的外部结构表现为数量有限的输入输出引脚,它们构成了微处理器级总线。2.微处理器级总线经过形成电路之后形成了系统级总线。3.简述总线的定义及在计算机系统中采用标准化总线的优点。答:总线是计算机系统中模块(或子系统)之间传输数据、地址和控制信号的公共通道,它是一组公用导线,是计算机系统的重要组成部分。采用标准化总线的优点是:1)简化软、硬件设计。2)简化系统结构。3)易于..._微机读写控制信号的作用是
文章浏览阅读205次。在写把操作的答案通过路由传参的形式传到下一个页面的时候,在下一个页面获取的时候数据被截取了解决办法 使用encodeURIComponent 进行加密然后再另外一个页面获取的时候使用 decodeURIComponent 进行解码这样就解决了路由传参时数据丢失的情况了转载于:https://www.cnblogs.com/jeremy-o..._小程序推荐路由传参会丢失值吗
文章浏览阅读2.5w次,点赞40次,收藏411次。逻辑综合重点解析(Design Compiler篇)前言 31、逻辑综合(Logic Synthesis)分为哪三个步骤? 42、当你拿到一个ddc格式的文件,你是否能够知道这是一个已经综合过的设计? 43、使用Design Compiler进行逻辑综合出现下述log,请问gtech.db和standard.sldb包含哪些信息? 44、Design Compiler综合过程中,targ..._rtl design → design compiler synthesis → gate-level design
文章浏览阅读2.8k次,点赞4次,收藏10次。遇到的问题:当第一个ul中的数据滚动完时,第二个ul 部分的click事件不起作用,无法实现一些点击这行解决思路:利用js事件委托机制原来是在li里面绑定事件出现上述问题,后来给最外层的父级div加委托事件,让父级事件执行。通过e.target.dataset.code 获取所需值备注:vue中自定义属性格式为 data-xxx获取为:e.target.dataset.xxxid 和 name ......_vue-seamless-scroll实现点击效果不起作用
文章浏览阅读2.1k次,点赞107次,收藏87次。spring框架的两大核心思想:控制反转,面向切面编程。控制反转:简称IOC,对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转依赖注入:简称DI,容器为程序提供运行时所依赖的资料,称为依赖注入。Bean对象:IOC容器中创建、管理的对象叫bean对象最后缕一缕:1.由于代码的高内聚(多功能混一块了),我们设计了出三层架构模式,Controller Service Dao,2.但是代码的耦合问题(一个模块对另一模块有依赖)没有解决,于是就有了控制反转与依赖注入,这两步合起来就是分层解耦。_spring控制反转和依赖注入
文章浏览阅读3.3k次。crontab命令是大多数系统都有的命令,有不排除由于有些系统被精简而没有的,这时对于CentOS系统,我们可以通过下面的命令来安装。yum -y install vixie-cron crontabsvixie-cron软件包是cron的主程序;crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。_crontab: command not found
文章浏览阅读1.1k次,点赞3次,收藏8次。Julia是重度 LaTex符号的偏好的语言。所以,有必要收藏一下LaTex符号表。julia> for i ∈ 1:5 # /in if i ∉ 2:3 # /notin println(i) end end145julia> k = 4π # π : \pi12.566370614359172julia> num =rand()julia> if num ≤ 0.5 println(num) end # ≤ : \lequsin_latex xor