利用DrawerLayout和触摸事件分发实现抽屉侧滑效果
作者:Allen-华 发布时间:2022-11-09 04:45:51
标签: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>
来源:http://blog.csdn.net/carry_code/article/details/51699249


猜你喜欢
- 本文实例讲述了WinForm窗体间传值的方法。分享给大家供大家参考。具体实现方法如下:窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作
- 本文介绍SpringBoot如何使用Prometheus配合Grafana监控。1.关于PrometheusPrometheus是一个根据应
- C语言的指针相当的灵活方便,但也相当容易出错。许多C语言初学者,甚至C语言老鸟都很容易栽倒在C语言的指针下。但不可否认的是,指针在C语言中的
- Java自定义注解一般使用场景为:自定义注解+ * 或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优雅。本文将先从自定义注解的
- Spring 中 Bean 的生命周期是当今最流行的 Java 开发框架之一,其强大的 Bean容器机制是其中的核心之一。Bean 是指在
- String类原生的字符串处理方法short s=1;s=s+1;与short s=1;s+=1;的区别一、“+&
- 1、final修饰类被final修饰的类不能被继承,因此final类的成员方法也不能被覆写,被final关键字修饰的类没有子类,因此类的实现
- 本文实例讲述了Android使用SharedPreferences存储数据的实现方法。分享给大家供大家参考,具体如下:编辑短信的时候,突然接
- 水仙花数:水仙花数是三位数,它的各位数字的立方和等于这个三位数本身,例如:370=33+73+00;371=33+73+13,370、371
- 前言Jetpack Compose(简称 Compose )是 Google 官方推出的基于 Kotlin 语言的 Android 新一代
- 在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求。由于这种限制不方便,所以出现了ArrayList。ArrayList、Lis
- 本文介绍在使用C#开发WinForm程序时,如何使用自定义的XML配置文件。虽然也可以使用app.config,但命名方面很别扭。我们在使用
- 1、 namenode启动在本系列文章三中分析了hadoop的启动文件,其中提到了namenode启动的时候调用的类为org.apache.
- Tab与TabHost:这就是Tab,而盛放Tab的容器就是TabHost 。如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了。
- 这两个update都是使用generator生成的mapper.xml文件中,对dao层的更新操作update更新传回数据的所有字段,没有传
- 目录什么是Insets?Insets相关类InsetsStateInsetsStateControllerInsetsSourceInset
- 从SpringMVC源码解析所用的例子,一个http://localhost:9090/web/hi?name=yang请求调用到下面的地方
- 1 依赖配置<parent> <groupId>org.springframework.b
- 一、问题在哪里?问题来源于app开发中一个很常见的场景——用户头像要展示成圆的: 二、怎么
- 本文实例讲述了Java实现指定线程执行顺序的三种方式。分享给大家供大家参考,具体如下:方法一:通过共享对象锁加上可见变量来实现。public