首页 技术 正文
技术 2022年11月16日
0 收藏 863 点赞 3,005 浏览 4286 个字

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

工程目录:

android 很多应用中用到的 listView + viewPager

效果图:

android 很多应用中用到的 listView + viewPager                 android 很多应用中用到的 listView + viewPager

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了。

好了。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,997
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,356
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,139
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848