Android 实现局部图片滑动指引效果
程序员文章站
2024-02-17 17:58:04
android 实现局部图片滑动指引效果
而viewpager的事件监听器代码如下:
// 滑动页面更改事件监听器
private class i...
android 实现局部图片滑动指引效果
而viewpager的事件监听器代码如下:
// 滑动页面更改事件监听器 private class imagepagechangelistener implements onpagechangelistener { @override public void onpagescrollstatechanged(int arg0) { // todo auto-generated method stub } @override public void onpagescrolled(int arg0, float arg1, int arg2) { // todo auto-generated method stub } @override public void onpageselected(int index) { pageindex = index; slidelayout.setpageindex(index); tvslidetitle.settext(parser.getslidetitles()[index]); for (int i = 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,下面是其代码:
package com.image.indicator.control; import android.content.context; import android.util.attributeset; import android.view.motionevent; import android.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 */ public class scrollviewextend extends scrollview { // 滑动距离及坐标 private float xdistance, ydistance, xlast, ylast; public scrollviewextend(context context, attributeset attrs) { super(context, attrs); } @override public boolean onintercepttouchevent(motionevent ev) { switch (ev.getaction()) { case motionevent.action_down: xdistance = ydistance = 0f; xlast = ev.getx(); ylast = ev.gety(); break; case motionevent.action_move: final float curx = ev.getx(); final float cury = ev.gety(); xdistance += math.abs(curx - xlast); ydistance += math.abs(cury - ylast); xlast = curx; ylast = cury; if(xdistance > ydistance){ return false; } } return super.onintercepttouchevent(ev); } }
感谢阅读,希望能帮助到大家,谢谢大家对 本站的支持!
下一篇: 简单学习Java抽象类要点及实例