scrollview积累的一点小小技巧,记录起来

来源:互联网 发布:跨表空间导入数据 编辑:程序博客网 时间:2024/05/16 14:37

慢慢记录,关于scrollview的就丢到这吧!


1.scrollview老是跳到底部,可以用此方法设置到顶部

txtBaseMsg.setFocusable(true);txtBaseMsg.setFocusableInTouchMode(true);txtBaseMsg.requestFocus();

txtBaseMsg是scrollview内最顶的一个控件,任何一个顶部子View都可以,主要是让他获得焦点,滚动到顶部

2.解决scrollview嵌套listview冲突,把listview设置成scrollview的样式,改写listview的onMeasure方法即可

        @Overridepublic void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);         }
3.解决scrollview嵌套ViewPager时两个控件触摸的冲突:自定义Viewpager做为子控件,因为在ViewPager的onTouchEvent中我对onDown进行了操作,进行了操作后就无法将touch事件继续往下传给onClick和其内部控件的任何事件,所以自己做了判断,做了个singleTouch来实现点击的事件,此段代码为转载(
原文链接:http://www.eyeandroid.com/thread-17137-1-1.html)

view sourceprint?01public class ChildViewPager extends ViewPager{   /** 触摸时按下的点 **/   PointF downP = new PointF();   /** 触摸时当前的点 **/   PointF curP = new PointF();   OnSingleTouchListener onSingleTouchListener;     public ChildViewPager(Context context, AttributeSet attrs) {   super(context, attrs);   // TODO Auto-generated constructor stub   }     public ChildViewPager(Context context) {   super(context);   // TODO Auto-generated constructor stub   }     @Override   public boolean onInterceptTouchEvent(MotionEvent arg0) {   // TODO Auto-generated method stub   //当拦截触摸事件到达此位置的时候,返回true,   //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent   return true;   }     @Override   public boolean onTouchEvent(MotionEvent arg0) {   // TODO Auto-generated method stub   //每次进行onTouch事件都记录当前的按下的坐标   curP.x = arg0.getX();   curP.y = arg0.getY();    if(arg0.getAction() == MotionEvent.ACTION_DOWN){   //记录按下时候的坐标   //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变   downP.x = arg0.getX();   downP.y = arg0.getY();  //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰   getParent().requestDisallowInterceptTouchEvent(true);   }     if(arg0.getAction() == MotionEvent.ACTION_MOVE){   //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰   getParent().requestDisallowInterceptTouchEvent(true);   }    if(arg0.getAction() == MotionEvent.ACTION_UP){   //在up时判断是否按下和松手的坐标为一个点   //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick   if(downP.x==curP.x && downP.y==curP.y){   onSingleTouch();   return true;   }   }     return super.onTouchEvent(arg0);   }     /**   * 单击   */   public void onSingleTouch() {   if (onSingleTouchListener!= null) {     onSingleTouchListener.onSingleTouch();   }   }     /**   * 创建点击事件接口   * @author wanpg   *   */   public interface OnSingleTouchListener {   public void onSingleTouch();   }     public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {   this.onSingleTouchListener = onSingleTouchListener;   }    }

0 0