最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android 实现局部图片滑动指引效果
时间:2017-03-05 编辑:简简单单 来源:一聚教程网
Android 实现局部图片滑动指引效果
而ViewPager的事件监听器代码如下:
代码如下 | 复制代码 |
// 滑动页面更改事件监听器 privateclassImagePageChangeListenerimplementsOnPageChangeListener { @Override publicvoidonPageScrollStateChanged(intarg0) { // TODO Auto-generated method stub
}
@Override publicvoidonPageScrolled(intarg0,floatarg1,intarg2) { // TODO Auto-generated method stub
}
@Override publicvoidonPageSelected(intindex) { pageIndex = index; slideLayout.setPageIndex(index); tvSlideTitle.setText(parser.getSlideTitles()[index]);
for(inti =0; i < imageCircleViews.length; i++) { imageCircleViews[index].setBackgroundResource(R.drawable.dot_selected);
if(index != i) { imageCircleViews[i].setBackgroundResource(R.drawable.dot_none); } } } } |
事件监听器中主要在回调函数onPageSelected(int index)中变换标题和圆点图片。
由于滑动区域下方的内容是不变的,也就是不滑动的,正如在我在上面提到的,内容可能会超出屏幕的范围,所以我们需要使用ScrollView以便内容过多的时候显示滚动条。可能一部分朋友会想到,要显示滚动条我也知道使用ScrollView。我想在这里说的是,这里即有ViewPager控件,也有ScrollView,如果两个View单独使用不会有什么问题。然而不幸的是,两个一结合使用就出现了问题。什么问题呢?就是在滑动图片时出现反弹的现象,就是在滑动时很难滑动,我滑动时感觉很吃力,而且图片就是滑动不过去,这个就是两个View之间的冲突,因为两个View都是滑动的View,都会计算相应的位置和判断相应的距离。
我们如何来解决这个冲突呢?这里我们需要重写ScrollView的onInterceptTouchEvent()回调函数。需要在程序里新加一个ScrollViewExtend类并继承自ScrollView,下面是其代码:
代码如下 | 复制代码 |
packagecom.image.indicator.control;
importandroid.content.Context; importandroid.util.AttributeSet; importandroid.view.MotionEvent; importandroid.widget.ScrollView;
/** * 能够兼容ViewPager的ScrollView * @Description: 解决了ViewPager在ScrollView中的滑动反弹问题
* @File: ViewPagerCompatScrollView.java
* @Package com.image.indicator.control
* @Author Hanyonglu
* @Date 2012-6-18 下午01:34:50
* @Version V1.0 */ publicclassScrollViewExtendextendsScrollView { // 滑动距离及坐标 privatefloatxDistance, yDistance, xLast, yLast;
publicScrollViewExtend(Context context, AttributeSet attrs) { super(context, attrs); }
@Override publicbooleanonInterceptTouchEvent(MotionEvent ev) { switch(ev.getAction()) { caseMotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; xLast = ev.getX(); yLast = ev.getY(); break; caseMotionEvent.ACTION_MOVE: finalfloatcurX = ev.getX(); finalfloatcurY = ev.getY();
xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); xLast = curX; yLast = curY;
if(xDistance > yDistance){ returnfalse; } }
returnsuper.onInterceptTouchEvent(ev); } } |
相关文章
- Android实现图片拖动效果 06-02
- Android编程实现图片透明的方法 05-31
- Android打开相册如何选择单张图片 05-12
- 如何给Android中的按钮添加图片功能 04-24
- Android ViewPager实现图片轮翻效果 02-28
- android中利用ImageView 图片循环播放 04-26