利用DrawerLayout和触摸事件分发实现抽屉侧滑效果
时间:2022-07-28
本文章向大家介绍利用DrawerLayout和触摸事件分发实现抽屉侧滑效果,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了DrawerLayout和触摸事件分发实现抽屉侧滑效果的具体代码,供大家参考,具体内容如下
效果展示
还是看代码实在,直接上菜了。
1.MainActivity的代码:
public class MainActivity extends AppCompatActivity implements MyDraweLayout.GetPositionCallback {
private List<ImageView imageList;
private ViewPager viewPager;
private MyAdapter adapter;
private MyDraweLayout myDraweLayout;
private int currentPosition;
@Override
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewpager);
myDraweLayout = (MyDraweLayout) findViewById(R.id.mydrawelayout);
initdata();
adapter = new MyAdapter(this, imageList);
myDraweLayout.setCallback(this);
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
currentPosition=position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void initdata() {
imageList = new ArrayList<ImageView ();
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.mipmap.ic_launcher);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageList.add(imageView);
imageView = new ImageView(this);
imageView.setImageResource(R.mipmap.ic_launcher);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageList.add(imageView);
imageView = new ImageView(this);
imageView.setImageResource(R.mipmap.ic_launcher);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageList.add(imageView);
imageView = new ImageView(this);
imageView.setImageResource(R.mipmap.ic_launcher);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageList.add(imageView);
}
@Override
public int position() {
return currentPosition;//TODO 通过接口回调把当前位置传到MyDraweLayout中
}
}
2.MyDraweLayout类中的代码:
public class MyDraweLayout extends DrawerLayout {
public MyDraweLayout(Context context) {
super(context);
}
public MyDraweLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyDraweLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
//TODO 事件拦截
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
//Todo 获得当前位置,进行判断
if(callback.position()==0){
return super.onInterceptTouchEvent(ev);
}else {
return false;
}
}
public interface GetPositionCallback{
int position();
}
private GetPositionCallback callback;
public void setCallback(GetPositionCallback callback){
this.callback = callback;
}
}
3.适配器的代码;
public class MyAdapter extends PagerAdapter {
private final List<ImageView imageList;
private final Context contex;
public MyAdapter(Context context, List<ImageView imageList) {
this.contex=context;
this.imageList = imageList;
}
@Override
public int getCount() {
return imageList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = imageList.get(position);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//super.destroyItem(container, position, object);这行代码记得删除,不然滑到Viewpager的时候会闪退哦
container.removeView(imageList.get(position));
}
}
4.xml布局:
<?xml version="1.0" encoding="utf-8"?
<com.example.a43_drawelayoutandviewpager.MyDraweLayout
android:id="@+id/mydrawelayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="250dp"
android:id="@+id/viewpager"/
</RelativeLayout
<ImageView
android:background="@mipmap/ic_launcher"
android:layout_width="300dp"
android:layout_gravity = "start"
android:layout_height="match_parent"
android:layout_below="@+id/viewpager"
/
</com.example.a43_drawelayoutandviewpager.MyDraweLayout
- eclipse tomcat下网页修改不生效
- 【插件开发】—— 14 Site is incorrect!编辑器启动报错!
- Java魔法堂:Date与日期时间格式化
- Java魔法堂:打包知识点之META-INF/MAINFEST.MF
- WordPress快速建站
- 大数据时代下的生活
- 【Spring实战】—— 1 入门讲解
- 博客园小技巧
- JS魔法堂:关于元素位置和鼠标位置的属性
- MyBatis魔法堂:Insert操作详解(返回主键、批量插入)
- Winodws安装系统时,通过安装磁盘进行分区
- Eclipse安装SVN插件
- JS魔法堂:IE5~9的Drag&Drop API
- mysql 5.7版本目录无data文件夹的解决办法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- latex之在windows环境下能够在latex中使用中文
- 在 Web 中获取 MAC 地址
- 基于maven+ssm的增删改查之ajax校验用户名是否可用
- (四十六)golang--网络编程(简易的聊天系统)
- JeeSite | 保存信息修改记录
- 基于maven+ssm的增删改查之关于ajax验证用户是否存在存在的问题
- 基于maven+ssm的增删改查之JS303校验
- MyBatis-Generator 用法介绍
- BERT源码分析(PART II)
- Wamp 下运行 CGI 笔记
- JeeSite | 保存信息修改记录续
- 植物大战僵尸辅助
- 基于maven+ssm的增删改查之修改员工信息
- 基于maven+ssm的增删改查之批量删除
- JeeSite | 保存信息修改记录封装