当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 实现局部图片滑动指引效果

Android 实现局部图片滑动指引效果

2019年07月24日  | 移动技术网移动技术  | 我要评论

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);
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对 本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网