在 Robotium 群里看到有人问,如何滑动屏幕中的某个 view,有人说,需要根据屏幕的分辨率来计算。不需要这么麻烦的,下面的代码,可以随意滑动 view。
/**
* 重写drag方法,可以从view的任意点滑倒任意点.
* 从view的最底部滑倒view的最上方,用来判断区域的滑动比例,可以选择滑动的比例是多少
* dragPage(View view,float dragPercentFrom_X,float dragPercentFrom_Y,float dragPercentTo_X,float dragPercentTo_Y)
* @param View 第一个参数是指定的view名称
* @param dragPercentFrom_X 第二个参数是设置起点位置x的百分比
* @param dragPercentFrom_Y 第三个参数是设置起点位置y的百分比
* @param dragPercentTo_X 第四个参数是设置终点位置x的百分比
* @param dragPercentTo_Y 第五个参数是设置终点位置x的百分比
*
* 参考solo.drag(fromX, toX, fromY, toY, stepCount);
* 第一个参数是从起始点的横轴x点,等于view的左上角x坐标点+view的宽度百分比;默认百分比是view的0.5倍
* 第二个参数是从起始点的横轴y点,等于view的左上角y坐标点+view的高度百分百
* 第三个参数是从终点的横轴y点(滑动到的坐标点x轴),fromX+view的滑动的百分百
* 第四个参数是从终点的横轴y点(滑动到的坐标点y轴),fromY+view的滑动的百分百
* 第5个参数是拖动的步骤数,等于(屏幕滑动高度的平方+屏幕滑动高度的平方)的开根号/100
*/
public void dragPage(View view,float dragPercentFrom_X,float dragPercentFrom_Y,
float dragPercentTo_X,float dragPercentTo_Y){
// 存储view的高度和宽度
int[] xyLocation = new int[2];
// 存储view的xy坐标,左下角坐标值
view.getLocationOnScreen(xyLocation);
// 获取view的宽度
final int viewWidth = view.getWidth();
// 获取view的高度
final int viewHeight = view.getHeight();
// 计算view的左上角的x坐标
final float viewLeftTop_x=xyLocation[0];
// 计算view的左上角的y坐标
final float viewLeftTop_y=xyLocation[1];
float FromX=viewLeftTop_x+viewWidth*dragPercentFrom_X;
float FromY=viewLeftTop_y+viewHeight*dragPercentFrom_Y;
float ToX=viewLeftTop_x+viewWidth*dragPercentTo_X;
float ToY=viewLeftTop_y+viewHeight*dragPercentTo_Y;
float MoveX=ToX-FromX;
float MoveY=ToY-FromY;
int StepCount=(int)((Math.sqrt(Math.pow(MoveX,2.0)+Math.pow(MoveY, 2.0)))/100);
solo.drag(FromX, ToX, FromY, ToY, StepCount);
Log.d(TAG, "viewwidth"+" :"+String.valueOf(viewWidth)+" "+"viewheight"+":"+String.valueOf(viewHeight));
Log.d(TAG, "xylocation[0]"+" :"+String.valueOf(xyLocation[0])+" "+"xylocation[1]"+":"+String.valueOf(xyLocation[1]));
}