欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

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