Android ViewPager与仿Gallery的HorizontalScrollView互相滑动监听
2014-06-06 11:12
666 查看
本文主要介绍ViewPager与仿Gallery的HorizontalScrollView互相滑动监听功能的实现。
实现步骤:
1.定义FrameLayout布局,在布局中加载viewPager
2.在布局底部加载HorizontalScrollView,并在HorizontalScrollView中for循环添加ImageView
3.实现HorizontalScrollView与ViewPager互相监听滑动
实现效果图如下:
下面是实现代码 (源码会在文章末尾附上链接地址):
主要布局FrameLayout:
fa = new FrameLayout(this);
fa.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
setContentView(fa);
得到屏幕的尺寸://HorizontalScrollView中ImageView的宽高要根据屏幕尺寸设置
public void getScreenSize(){
DisplayMetrics dms = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dms);
w = dms.widthPixels;
h = dms.heightPixels;
}
private int[] maplist = {//图片资源
R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,R.drawable.f
};
ViewPager实现 :
public void pagers(){
vp= new ViewPager(this);
vp.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
fa.addView(vp);
ProductPagerAdapter ppa = new ProductPagerAdapter(this);//适配类
ppa.setMaps(maplist);//资源数组
vp.setAdapter(ppa);
vp.setCurrentItem(0);
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {//在这里进行HorizontalScrollView的异步滑动
count = arg0;
Handler handler = new Handler();
handler.postDelayed(runnable, 0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
HorizontalScrollView仿Gallery效果实现:
public void setGallary(){
hsc = new HorizontalScrollView(this);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,w/3);
lp.topMargin =h-w/3;
hsc.setLayoutParams(lp);
fa.addView(hsc);
LinearLayout gallery = new LinearLayout(this);
gallery.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
gallery.setBackgroundColor(Color.WHITE);
gallery.getBackground().setAlpha(150);
gallery.setPadding(8, 8, 8, 8);
hsc.addView(gallery);
ims = new ArrayList<ImageView>();
for(int i= 0;i<maplist.length;i++){//这是资源数组
ImageView iv = new ImageView(this);
LinearLayout.LayoutParams lp_iv = new LinearLayout.LayoutParams(w/3,LayoutParams.MATCH_PARENT);
iv.setLayoutParams(lp_iv);
iv.setBackgroundResource(R.drawable.biankuang2);//设置imgeView的边框
iv.setTag(i);
iv.setScaleType(ScaleType.FIT_XY);
iv.setPadding(5, 5, 5, 5);
iv.setImageBitmap(small[i]);
gallery.addView(iv);
ims.add(iv);//将ImageView加入到一个数组中,以便于后边ImageView选中状态的切换
if(i==0){//默认第一个选中
iv.setBackgroundResource(R.drawable.biankuang);
iv.setPadding(5, 5, 5, 5);
bk.add(iv);
}
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
count = (Integer) v.getTag();
vp.setCurrentItem(count);//调动ViewPager
}
});
}
}
private Runnable runnable = new Runnable() {
@Override
public void run() { //HorizontalScrollView滑动逻辑
if(count>1){
hsc.scrollTo((count-1)*w/3, 0);
}else{
hsc.scrollTo(0,0);
}
ImageView iv =ims.get(count);
restor(iv);//切换ImageView的选中状态
}
};
public void restor(View v){//切换点击效果
v.setBackgroundResource(R.drawable.biankuang);
v.setPadding(5, 5, 5, 5);
bk.add(v);
ImageView iv= (ImageView) bk.get(0);
iv.setBackgroundResource(R.drawable.biankuang2);
iv.setPadding(5, 5, 5, 5);
bk.remove(0);
}
基本逻辑代码就这些,想要源码的话去这里http://download.csdn.net/detail/yeyuehei/7455327
实现步骤:
1.定义FrameLayout布局,在布局中加载viewPager
2.在布局底部加载HorizontalScrollView,并在HorizontalScrollView中for循环添加ImageView
3.实现HorizontalScrollView与ViewPager互相监听滑动
实现效果图如下:
下面是实现代码 (源码会在文章末尾附上链接地址):
主要布局FrameLayout:
fa = new FrameLayout(this);
fa.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
setContentView(fa);
得到屏幕的尺寸://HorizontalScrollView中ImageView的宽高要根据屏幕尺寸设置
public void getScreenSize(){
DisplayMetrics dms = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dms);
w = dms.widthPixels;
h = dms.heightPixels;
}
private int[] maplist = {//图片资源
R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,R.drawable.f
};
ViewPager实现 :
public void pagers(){
vp= new ViewPager(this);
vp.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
fa.addView(vp);
ProductPagerAdapter ppa = new ProductPagerAdapter(this);//适配类
ppa.setMaps(maplist);//资源数组
vp.setAdapter(ppa);
vp.setCurrentItem(0);
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {//在这里进行HorizontalScrollView的异步滑动
count = arg0;
Handler handler = new Handler();
handler.postDelayed(runnable, 0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
HorizontalScrollView仿Gallery效果实现:
public void setGallary(){
hsc = new HorizontalScrollView(this);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,w/3);
lp.topMargin =h-w/3;
hsc.setLayoutParams(lp);
fa.addView(hsc);
LinearLayout gallery = new LinearLayout(this);
gallery.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
gallery.setBackgroundColor(Color.WHITE);
gallery.getBackground().setAlpha(150);
gallery.setPadding(8, 8, 8, 8);
hsc.addView(gallery);
ims = new ArrayList<ImageView>();
for(int i= 0;i<maplist.length;i++){//这是资源数组
ImageView iv = new ImageView(this);
LinearLayout.LayoutParams lp_iv = new LinearLayout.LayoutParams(w/3,LayoutParams.MATCH_PARENT);
iv.setLayoutParams(lp_iv);
iv.setBackgroundResource(R.drawable.biankuang2);//设置imgeView的边框
iv.setTag(i);
iv.setScaleType(ScaleType.FIT_XY);
iv.setPadding(5, 5, 5, 5);
iv.setImageBitmap(small[i]);
gallery.addView(iv);
ims.add(iv);//将ImageView加入到一个数组中,以便于后边ImageView选中状态的切换
if(i==0){//默认第一个选中
iv.setBackgroundResource(R.drawable.biankuang);
iv.setPadding(5, 5, 5, 5);
bk.add(iv);
}
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
count = (Integer) v.getTag();
vp.setCurrentItem(count);//调动ViewPager
}
});
}
}
private Runnable runnable = new Runnable() {
@Override
public void run() { //HorizontalScrollView滑动逻辑
if(count>1){
hsc.scrollTo((count-1)*w/3, 0);
}else{
hsc.scrollTo(0,0);
}
ImageView iv =ims.get(count);
restor(iv);//切换ImageView的选中状态
}
};
public void restor(View v){//切换点击效果
v.setBackgroundResource(R.drawable.biankuang);
v.setPadding(5, 5, 5, 5);
bk.add(v);
ImageView iv= (ImageView) bk.get(0);
iv.setBackgroundResource(R.drawable.biankuang2);
iv.setPadding(5, 5, 5, 5);
bk.remove(0);
}
基本逻辑代码就这些,想要源码的话去这里http://download.csdn.net/detail/yeyuehei/7455327
相关文章推荐
- 实现android左右滑动效果:ViewFlipper、ViewPager、HorizontalScrollView
- Android_横向滑动菜单, HorizontalScrollView,Fragment,Viewpager结合使用 +pullToRefreshListView
- Android_横向滑动菜单, HorizontalScrollView,Fragment,Viewpager结合使用
- Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)
- Android_横向滑动菜单, HorizontalScrollView,Fragment,Viewpager结合使用
- Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- android Viewpager HorizontalScrollView 实现分页栏拖拽
- Android重写HorizontalScrollView仿ViewPager效果
- android - 滑动效果之ViewFlipper与ViewPager与Gallery
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
- android Viewpager HorizontalScrollView 实现分页栏拖拽
- Android 自定义View修炼-自定义HorizontalScrollView视图实现仿ViewPager效果
- android 横向滑动 HorizontalScrollView
- 备忘-Android ViewPager 与Gallery滑动冲突解决方法
- android scrollView 内嵌ViewPager或Gallery等水平滑动控件冲突问题解决实现同时滑动
- android viewpager 滑动监听
- Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
- Android 中的用HorizontalScrollView布局实现类似Gallery效果