您的位置:首页 > 运维架构 > Linux

linux系统编程之文件与I0:文件描述符相关操作-dup,dup2,fcntl

2013-07-11 22:34 477 查看
解决方案1:

自定义Viewpager做为子控件[java] view plaincopyprint?




public 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;

}

}

解决方案2:重写ScrollView的onInterceptTouchEvent()回调函数。需要在程序里新加一个ScrollViewExtend类并继承自ScrollView,下面是其代码:[java] view plaincopyprint?




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: ScrollViewExtend.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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: