最近下载了一个叫拍照的软件进行练习,里面有大量的图片,很适合我想要做的一些操作。有关只有apk的情况在前面已经有说明。

一.使用工具uiautomatorviewer

----- 为什么会使用这个工具?——开始使用的是hierarchyviewer,虽然它也很好用,但是对于某些控件它检测不到。

----- 这个工具的好处?——  它直接锁定你当前的操作页面,得到页面上的布局状况,控件类型,控件id

-----如何使用?——在android sdk的tools中双击uiautomatorviewer.bat

                        

-----注意点?——1.点击上面的按钮,出现如下提示:No Android devices were detected by adb,表示设备没有连接上android模拟器

                 ——2.打开的安卓模拟器需要是4.1以上的版本,打开4.1的版本有不同的反应:1)有报如下错误的 2)成功打开发现没有id

                 ——3.报如下错误:Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!网上有说是打开的版本是4.1的,但是我打开4.4的也会报这个错误,只能重新打开了

              

二.相关操作

1.点击某个控件

public Activity a;

public void test(){
   //获得当前activity
   a= solo.getCurrentActivity();
  //获取资源id
   int id = a.getResources().getIdentifie("platform_album_sort_btn", "id", a.getPackageName());
  //通过资源id找到控件
   v =a.findViewById(id);
  //点击控件
   solo.clickOnView(v);
   solo.sleep(2000);

}
View Code

 

2.向下滚屏

solo.scrollDown();

只能实现一页内的滚动,不能滚动加载下一页

3.滚动置顶

  solo .scrollToTop(); 

4.返回上一个页面

solo.goBack();

5.上拉加载

        GridView gridview = (GridView) solo.getView("gridview");
        int[] location = new int[2];
        gridview.getLocationOnScreen(location);
        location[1] = location[1] + gridview.getBottom();
       // Log.i(TAG, "[Location x]:  " + Integer.toString(location[0]));
       // Log.i(TAG, "[Location y]:  " + Integer.toString(location[1]));
        //获取上拉加载更多拖动点的坐标
        if (solo.waitForView(gridview)) {
            int newlistcount, listcount = gridview.getCount();
            while (i<10) {
                i++;
                solo.scrollListToLine(gridview, listcount);
                solo.sleep(500);
                solo.drag(location[0] + 10f, location[0] + 10f,
                        location[1] - 10f, location[0] - 100f, 50);
                
                solo.takeScreenshot() ;

                solo.sleep(2000);
                newlistcount = gridview.getCount();
                if (newlistcount == listcount) {
                    break;
                } else {
                    listcount = newlistcount;
                 //   Log.i(TAG, "[List count]:  " + Integer.toString(listcount));
                }
            }
        }

6.下拉刷新

       GridView gridview=(GridView)solo.getView("gridview");
       int[] location=new int[2];
       gridview.getLocationOnScreen(location);//获取GridView的坐标
       solo.sleep(1000);
       solo.drag(location[0]+10,location[0]+10,location[1],location[1]+gridview.getHeight(),3);

7.左右滑动

 solo.scrollToSide(Solo.RIGHT);   从右往左滑动

 solo.scrollToSide(Solo.LEFT);   从左往右滑动

每次只滑动一张图片,想滑动多张用循环,但是我还不知道最后一张图片后怎么结束

8.GridView和ListView

GridView:就是一行并列几张照片的那种布局

ListView:就是一行一个的列表

这2个控件的上拉加载是类似的,只要将GridView换成ListView就ok了

9.获取相同id的某个控件

这个在选择照片的情况中经常碰到,GridView控件中有很多RelativeLayout,RelativeLayout中存在ImageView

1)能够直接获取IamgeView的id

 ImageView im=(ImageView)solo.getView("album_item_photo",1);

solo.clickOnView(im);

album_item_photo为控件id,1是所选控件的那个下标

2)能获得GridView的id,没有ImageView的id

GridView gridview=(GridView)solo.getView("album_detail_grid");

RelativeLayout RL = (RelativeLayout) gridview.getChildAt(2);

ImageView im=(ImageView)RL.getChildAt(0);

solo.clickOnView(im);

或者

GridView gridview=(GridView)solo.getView("album_detail_grid");

RelativeLayout RL = (RelativeLayout) gridview.getChildAt(2);

int id = a.getResources().getIdentifier("album_item_photo", "id", a.getPackageName());

ImageView im = (ImageView) RL.findViewById(id);

ImageView im=solo.getCurrentViews(ImageView.class, RL).get(0);