Android怎么在非activity的类里修改控件?


这个布局代码没什么难度就不讲了。 
下面来看看两个按钮的操作代码:

在这里我们构造了一个ValueAnimator,动画范围是0-400,设置重复次数为无限循环。循环模式为倒序。在animator.setDuration(1000)表示动画一次的时长为1000毫秒。最后,由于我们在取消动画时还需要我们构造的这个ValueAnimator实例,所以将animator返回。 

前面,我们讲过一个添加监听器animator.addUpdateListener,以监听动画过程中值的实时变化,其实在ValueAnimator中共有两个监听器:

在上面的代码中,我们是在doRepeatAnim()函数的基础上,又添加了AnimatorListener()以监听它的状态,并把这些状态打印出来。 
我们来看看动画效果: 
打印出来结果如下: 


上面我们讲了如何添加监听函数,下面我们来看看如何移除监听器:


可见只打印了循环三次以前的log,在移除我们添加的AnimatorListener之后,我们打印log的代码就不会再执行了,所以也就不会再有log了。 
好了,有关监听器的部分,我们就到这里了 

上面我们讲了ValueAnimator中常用的一些函数,但是还有一些函数虽然不常用,但我们还是简单讲一下,他们分别是:

但clone()这个函数就有点难度了;首先是什么叫克隆。就是完全一样!注意是完全一样!就是复制出来一个完全一样的新的ValueAnimator实例出来。对原来的那个ValueAnimator是怎么处理的,在这个新的实例中也是全部一样的。 
我们来看一个例子来看一下,什么叫全部一样: 

这个函数其实与上面在讲循环函数时的doRepeatAnim()函数是一样的;在这个函数中,我们定义一个ValueAnimator,设置为无限循环,然后添加AnimatorUpdateListener监听;在动画在运动时,向下移动textview.这里要非常注意的一点是我们只是定义了一个ValueAnimator对象,并没有调用start()让动画开始!!!! 

在上面的代码中,我们在点击btnStart时:

这里有一点非常注意是:我们除了对newAnimator设置了动画开始延时1000毫秒以后,没有对它进行任何设置,更没有在在它的监听器中对textview的处理!!!!那textview会动吗?答案是会动的,我们讲了,克隆就是完全一样,在原来的ValueAnimator中是如何处理的,克隆过来的ValueAnimator也是完全一样的处理方式! 

我们既移除了repeatAnimator的监听器又取消了动画。但有用吗?必须当然是没用的,因为我们start的动画对象是从repeatAnimator克隆来的newAnimator。这好比是克隆羊,原来的羊和克隆羊什么都是一样的,但你把原来的羊杀了,克隆的羊会死吗?用大脚指头想都知道不会!所以如果要取消当前的动画必须通过newAnimator.cancel()来取消 

从效果图中也可以看出,点击btnCancel按钮是没有做用的,并没能取消动画。 

好了,到这里有关ValueAnimator的常用函数基本就讲完了,下篇将更深入的讲解ValueAnimator的高级用法。 

如果本文有帮到你,记得加关注哦

请大家尊重原创者版权,转载请标明出处:

1.下面不是Android四大组件之一的(B )

2. 下面关于广播叙述错误的是(A)

D. 动态注册需要在应用退出时候接触广播的注册。

C. BroadcastReceiver的使用,一定有一方发送广播,有一方监听注册广播,onReceive方法才会被调用。

D. 广播发送的Intent都是隐式启动。

4. 下面关于谁先接收广播顺序错误的是(B)

A. 有序广播,优先级高的先接收

B. 有序广播,同优先级的动静态广播接收器,静态优先于动态。

C. 有序广播,同优先级的动态广播接收器,先注册的大于后注册的。

D. 普通广播时,无视优先级,动态广播接收器优先于静态广播接收器

5. 下面关于广播说法错误的是(B)

A. 广播分为有序广播和无序广播

C. 广播注册方式分为动态和静态

6.下列关于Intent启动组件说法错误的是(C)

7.对于广播的发送,Intent的启动方式是(B )

D. 以上说法都不正确。

A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是String类型,而值都是基本类型

B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是任意类型,而值都是基本类型

C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名,可以为空,而值都是String类型

D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值也是String类型

这里需要把Instrumentation类的视频的上、中、下三集一起看,把内容总结一下。。。

如何在一个app中做event事件?(touch、滑动和按键等)

1、Robotium的运行原理是什么?

根本原因是因为:setup和teardown是junit必须执行的生命周期函数,所有的Test类都是基于这个做的,所以必须要有这两个方法才行。

答:按照理解,这个配置的Instrumentation节点的anroid:name指的就是用以启动的TestRuner的名,只有配置了这个之后,测试程序才能够启动起来,这个启动过程应该又回到上一篇Robotium里面记录的那样了,运行一个测试程序,会先运行一个系统工具Activity Manager,然后Activity

Instrumentation是执行Application Instrumentation代码的基类,当应用程序运行的时候Instrumentation处于开启(备注:需要了解应用程序运行之前就已经开启哪些东西?),Instrumentation将在任何应用程序运行前初始化,可以通过它监测系统与应用程序之间的交互。

Instrumentaion比较像Windows里面的钩子(Hook),在系统和应用程序之间装了一个特殊装置用以进行监听

1、准备安卓的环境(java环境、eclipse、环境变量配置)

2、写一个安卓的app(被测app)

3、开始写测试框架代码

 测试必须要保证测试app和被测程序签名一致,既然是自己写的,那么肯定是用debug签名比较方便,这样被测代码和测试代码在不同的包中,但是在同一个工程里,签名肯定一致;如果没有源码的话,也需要签名一致,就需要进行重签名了。

具体的代码就是,建一个包名来创建app,然后一个待测程序建立一个包,一个测试程序建立一个包。

Instrumentation对安卓操作系统的版本没有要求,这个是特别好的

serchText方法是将所有的TextView全部找到,放到一个集合中,然后去做对比(通过正则表达式)

InstrumentationTestCase2的。其实东西都是一样的,就是你要知道包名,然后知道类名,然后通过这个类名去findViewById来获取到你需要的控件ID,之后调用方法对这个控件进行操作(包括sendPointSync等注入事件、runOnMainSync、runOnUiThread方法等来操作控件),之后根据当前控件的状态,与你预期想要的状态做一个对比,就可以知道是否达到了想到的结果。另外,还需要在AndroidManifest.xml中进行<Instrumentation>节点的配置,用以告诉ActivityManager要用什么TestRunner。

sendPointerSync方法(能够产生手指操作控件的响应效果)

解决方案:直接在AndroidManifest.xml中进行配置,如果出现类似的这种涉及到perssion的问题,也是类似,直接在Manifest.xml中配置即可,应该都能解决。

说明:得到上下文的一个引用,就可以进一步得到view、windows、控件

说明:以同步方式start一个Activity,即这是一个阻塞性的方法,必须要start起这个Activity之后,返回了结果,然后程序才能继续往下走

所谓同步:就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;

所谓异步:就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。

发送一个具体的点触事件,MotionEvent有obtain方法,可以针对具体的Down或者UP事件进行操作,在某一个特定的坐标位置,通过这个能够看到测试case时,程序上会出现被点击选中的阴影效果,而直接调用button.performClick()方法是没有这个效果的。

新浪微博:金阳光woody

1、百度搜:金阳光测试

我要回帖

更多关于 android studio图标怎么改 的文章

 

随机推荐