比如网易啊啥的, 有些界面的 listview 第一行是可以 左右滑动的 viewpager,当滑动下面listView的时候 会一起滑动上去

工程目录:

效果图:

                 

1. MyViewPager.java

public class MyViewPager extends ViewPager {

	int mLastMotionY;
int mLastMotionX; public MyViewPager(Context context) {
super(context);
} public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
} //拦截 TouchEvent
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
return super.onInterceptTouchEvent(arg0);
} //处理 TouchEvent
@Override
public boolean onTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
return super.onTouchEvent(arg0);
} //因为这个执行的顺序是 父布局先得到 action_down的事件 /**
* onInterceptTouchEvent(MotionEvent ev)方法,这个方法只有ViewGroup类有
* 如LinearLayout,RelativeLayout等 可以包含子View的容器的
*
* 用来分发 TouchEvent
* 此方法 返回true 就交给本 View的 onTouchEvent处理
* 此方法 返回false 就交给本View的 onInterceptTouchEvent 处理
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) { //让父类不拦截触摸事件就可以了。
this.getParent().requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(ev); }
}

2. MainActivity.java

public class MainActivity extends Activity {

	private ListView  listView;
private MyAdapter MyAdapter; private List<View> list_views =new ArrayList<View>(); @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newslist_main);
//造1个 假数据
for (int i = 0; i <4; i++) {
View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.topimage, null);
if(i == 0){
v.setBackgroundResource(R.drawable.a1);
}else if( i ==1){
v.setBackgroundResource(R.drawable.a2);
}else if(i ==2){
v.setBackgroundResource(R.drawable.a3);
}else if( i ==3){
v.setBackgroundResource(R.drawable.a4);
}
list_views.add(v);
} listView = (ListView) findViewById(R.id.newslist);
MyAdapter = new MyAdapter(this,list_views);
listView.setAdapter(MyAdapter);
}
}

3.MyAdapter

public class MyAdapter extends BaseAdapter {

    private View             topViewPager;     //顶部View
private ViewPager viewPager; //顶部View 中的ViewPager
private MyPagerAdapter pageAdaper; //Viewpager adapter
private List<View> images; //上方viewpager的图片 private Context context; public MyAdapter(Context context,List<View> images) {
this.context = context;
this.images = images;
pageAdaper = new MyPagerAdapter();
} //ListView size
@Override
public int getCount() {
return 20;
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
if(position == 0){
//第一行 viewpager的layout
return setTopView(convertView);
}else {
//其他listView
View view = LayoutInflater.from(context).inflate(R.layout.listitem, null);
return view;
}
} private View setTopView(View convertView){
if(topViewPager==null){
//加载顶部View
topViewPager = LayoutInflater.from(context).inflate(R.layout.index_photos, null);
//设置Viewpager
viewPager = (ViewPager)topViewPager.findViewById(R.id.topViewPager);
//塞入adapter
viewPager.setAdapter(pageAdaper);
//默认选中第一个
viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(new MyPagerChangeListener()); }
return topViewPager;
} private class MyPagerChangeListener implements OnPageChangeListener{ @Override
public void onPageSelected(int position) {
Toast.makeText(context, "position="+ position, 1).show();
} @Override
public void onPageScrollStateChanged(int arg0) { } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) { }
} /**
* ViewPager adapter
*/
public class MyPagerAdapter extends PagerAdapter { @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1; } // @Override
// public int getItemPosition(Object object) {
// // return super.getItemPosition(object);
// return POSITION_NONE;
// } @Override
public int getCount() {
return images.size();
} @Override
public Parcelable saveState() {
return null;
} @Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView(images.get(position)); } // viewpager 每个页卡的实例化
@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(images.get(position));
return images.get(position);
}
}
}

adapter 把 pageradapter 和 listadapter的组合

xml其实没有什么贴的了。,  就是1个 listview  ,1个 viewpager 就完了(当然这个是自己继承后的 那个View),

 <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
> <com.example.custome.MyViewPager
android:id="@+id/topViewPager"
android:layout_width="match_parent"
android:layout_height="300dip"
android:background="#ffffff"
android:layout_gravity="top"
/> </LinearLayout>

另外1个就是一个 listview了。

好了。

android 很多应用中用到的 listView + viewPager的更多相关文章

  1. Android listview viewpager解决冲突 滑动

    Android listview viewpager滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决   在listview 上使用 addHeaderView 在第 ...

  2. android 很多牛叉布局github地址(转)

    原文地址 http://blog.csdn.net/luo15309823081/article/details/41449929 点击可到达github-------https://github.c ...

  3. Android开发之漫漫长途 XIV——ListView

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  4. Android开发之漫漫长途 XVI——ListView与RecyclerView项目实战

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  5. android 项目学习随笔九(ListView加头布局)

    1.缓冲背景色 <ListView android:id="@+id/lv_list" android:layout_width="match_parent&quo ...

  6. Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/18311877) 今天还是给大家带来自定义控件的编写,自定义一个Lis ...

  7. android 简易时间轴(实质是ListView)

    ListView的应用 1.在很多时候是要用到时间轴的,有些处理的时间轴比较复杂,这里就给出一个比较简单的时间轴,其实就是ListView里面的Item的设计. 直接上代码: ListView,ite ...

  8. 安卓Android基础第三天——数据库,ListView

    数据库介绍sqlite问:什么情况下使用数据库?答:有大量相似结构的数据需要存储的时候 数据库的创建定义一个类继承SqliteOpenHelpercontext:上下文name:数据库名字,如&quo ...

  9. Android实现页面跳转、ListView及其事件

    Android实现页面跳转.ListView及其事件 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 进入主页面后,使用ListView实现特 ...

随机推荐

  1. Spring中数据绑定的两种方式(BeanWrapperImpl或者DataBinder)

    import org.apache.shiro.authc.AuthenticationToken; import org.springframework.beans.*; import org.sp ...

  2. jquery 点击页面流畅弹出预定文字

    js代码: <script src="https://cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script&g ...

  3. 玩转SpringCloud(F版本) 一.服务的注册与发现(Eureka)

    一.服务的注册与发现(Eureka) spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等 ...

  4. 图的基本操作(基于邻接表):图的构造,深搜(DFS),广搜(BFS)

    #include <iostream> #include <string> #include <queue> using namespace std; //表结点 ...

  5. Codeforces Round #404 (Div. 2) B. Anton and Classes 水题

    B. Anton and Classes 题目连接: http://codeforces.com/contest/785/problem/B Description Anton likes to pl ...

  6. iOS9UICollectionView自定义布局modifying attributes returned by UICollectionViewFlowLayout without copying them

    UICollectionViewFlowLayout has cached frame mismatch This is likely occurring because the flow layou ...

  7. Linux学习笔记07—mysql的配置

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  8. PL/SQL Developer中调试oracle的存储过程

    作者:iamlaosong 唉,真土,曾经用Toad.一直用dbms_output.put_line调试存储过程,仅仅认为不方便,用上PL/SQL Developer后,习惯性的还是用这种方法.人都是 ...

  9. Hbase总结(五)-hbase常识及habse适合什么场景

    当我们对于数据结构字段不够确定或杂乱无章非常难按一个概念去进行抽取的数据适合用使用什么数据库?答案是什么,假设我们使用的传统数据库,肯定留有多余的字段.10个不行,20个,可是这个严重影响了质量. 而 ...

  10. WCF Routing服务,负载均衡

    WCF4.0支持路由机制,通过RoutingService实现请求分发.拦截处理. 一.应用场景 1.暴露一个endpoint在外网,其余服务部署于内网: 2.请求分发,能对服务做负载功能: 二.WC ...