00:00
下面我们做一个小练习。嗯,练习的那个效果大家应该是很清楚了,就是我们按着那个图片呢,可以对它进行拖动。但这里面有一个。控制。图片不能超出屏幕显示的区域。比如说你你这个你这个东西这个这个图标不能搁进去了。能懂吧,嗯,你不能只是显示一部分。好。这地方主要做什么呢?一个是做的是motion event。的处理。还有一个。如何对视图进行动态的定位?啊,这个地方涉及到一些方法。啊,上面呢,有四个方法。来得到当前视图的坐标。你说一个斯图的坐标是怎么确定的呢?组合顶点的坐标。
01:01
右下角的坐标。那这两个坐标一共有几个值啊?四个字。那对应四个方法。嗯。啊,那就是它的一个左顶点的一个横坐标。托了左顶点的一个纵坐标。啊,这个是右下角的坐标是吧。好,这一个方法至关重要。NEO的方法。这个方法呢,是对视图对象进行重新的定位。你看我可不可以它指定它新的重要位置,是不是显示了新的位置啊。对吧,我们在移动的过程中就是要把三硅谷的一个图片进行。重庆的定位?后面还会涉及到一个方法啊,叫get parent。得到是吗?得到父亲。
02:01
好啦。来给大家演示一下啊。我们来去把那个呢给它创建出来。叫APP。Li Li。这个讲的是叫motion的一个练习。好,把这一个包名给他写写,和它硅谷。4.34.3。4.3 next next next。Finish。啊。来啊。我们还是一样啊,需要去简单的写一个东西。嗯。把他们先去掉。我们来看一下,呃,首先第一个呢,还是要去。布局啊,这个应该好做对吧?嗯,第二个看这里我们来看我们的效果,这个是不是要给他给这个image view这个视图去添加监听呢,添加什么监听。
03:14
是不是触摸的监听啊啊。给imagine。设置。叫监听对吧,那设监听主要是要去处理吧。啊,处理的时候怎么个处理法呢?我们要去鉴定他哪些事件呢。他不有down木和什么up是吧,我们要经历哪些?啊,但要不要监听知道吧,这是什么?木木是最关键的。对吧。阿了。啊,我今天干什么事?木的是是不是要记录位置呀,Up木的时候我现在不断移动,Down的时候要记录位置up呢。
04:05
确定位置啊,确定位置是吧?啊,那我先写一下啊,阿尔法的时候好木的时候,我要记住什么东西。事件,无论是当是木还是up,是不是都要把那个坐标给记住啊?嗯,来,我先给大家画图啊。啊,我啦,把这个给大家截下来。放到这里啊好了,接着假设我按下的区域。是在这里。是吧?好,接着这是按下去啊,我下面是不是移动啊。假设啊,我移动,我假设移动到这里来了。这是我第一个移动啊,第二个移动呢,在这。
05:03
那你说我的这一个这一个视图,你就这image是不是要跟着我动啊。那就是这样一个效果,大家看啊。我可以把这个去掉。相当于是这样的,把它copy给一个。这是一个位置。这又是个新的位置,可以吧?好,再来看。现在呢,我们是先有事件的移动,才能再去动态的指定视图的位置吧,啊视图呢,看到事件是从这个位置最终呢,移到了这里来了。对吧,接着呢,又移到这来了。理解吧,没问题,好了,那我的视图。的移动,是不是要根据这个事件的移动来移动啊。那我事件是个怎么移动法呢?我们来看一下,你说我现现在计算坐标的时候。
06:01
你参照谁来计算?是视图的着定点呢,还是我的这一个屏幕的着定点呢?是不是应该经根据那个屏幕做定点呢,这样才是好,有一个固定的一个参照物,对不对,这是一个固定的参照物,我们要计算位移啊对不对,好,那也就是说什么呢?来。看这里我们呢,先要把这个坐标给它记知道了对吧?啊,这个是假设是X1啊Y1是吧。好,下面呢,我就在移动到这来了。是吧,啊XR啊YR是不是又有一个坐标啊,啊接着。在这里面又有一个位置啊,又有一个位置。啊,X3Y3啊,一次可能会越来越多啊。
07:03
好,我想计算什么呀。首先你看着我第一次移动从大到第一个目,是不是就有一个移动啊,我移动的时候,我得把那个偏移量给计算出来吧。好,你来看啊,我得怎么做。我无论是当还是目,我都要去计算一个东西叫event的坐标,而且坐标是不是两个值啊,一个叫even X。啊,一个叫什么even y这个怎么得呀。疑问的对象点get X,因为我们参照的是屏幕的着顶点吗?好。X啊,X是吧,少了一个X。Get even.get y,这无论是down还是木,是不是都要做?
08:06
好了。下面来看一下啊。那我们要怎么做呢?看呢,我们每一次的位移都要计算,而且位移呢是上一个坐标的。坐标上一个事件的坐标跟当前这个事件坐标的一个差值吧。我最终肯定要去求出位移量,那这个差值怎么算法呢?差值就要开始要有一个这样的一个概念叫那时的X,还有一个概念叫什么呢?Last y这一个值,这两个值是不是要不断的在更新呢?你说第一次给他复制的是什么,给他出啊?我应该有两个这样的值,代表是上一个事件的坐标,那上一个事件总要有开始的时候吧?开始的时候给怎么给它负值,是不是当的时候啊,当的时候当的时候怎么给它赋值。
09:07
其实就是last X等于谁?对,等于even的什么X啊,那个last y了,是英文的Y呀,是那样的吗?嗯,好啦,下面木的时候呢。十每一个目我都是不是要计算偏移量啊,这个偏移量怎么算?是不是用even就当前事件的一个坐一个事件坐标减去什么,那是的X。这样就得到了什么。是不是X和什么呢?偏移量啊,我叫他一个什么呢?DX就是本来偏移距离就是distance嘛。是不是第3X啊,那简单写,我们平常怎么写呢,DX。
10:05
就是X轴方向的一个移动的距离,还有一个什么?DY等于even的Y减去Y。这个时候我计算这个偏移量是为了做什么呀?未来做什么?此时我还没有移动法,我是要将试图进行移动法,要将视图移动,是怎么个移动法?要用他的哪个方法?假设我得到you了点你out的方法。这个的方法怎么算?这个是移动的距离吧,是不是在原有的坐标的系上去,加上你什么。移动的距离啊。这个怎么算呢?那你先得这个地方只有三个坐标三个字啊,一个叫left,呃,有top有什么呢?Right,有,还有一个bottom,我是不是提前把这三个新的值给算出来呀。
11:13
可说赖怎么算?在以原有的,原有的,怎么说有点get left,这是他们现有的呀。加上一个什么,这不就是新的吗?对不对,好top了,类似的吧,Imagine you.get一个top加上。是吧?是这么回事吧?嗯,好,其他的两个是不是类似的?好,也就是right等于image view.get一个right加上一个DX,别加错了啊,还有一个bottom。
12:03
等于image view.get bottom啊,方法加上一个D。WHY吧?睡了吗?嗯,好啦。那你看啊,我的第一个目是不是执行了这一个。好,后来是不是第二个木又来了呀,又来了,我是不是又算了。关键是这个时候,我又算这个距离的时候。我算距离是跟每你看我的第二个木是参照谁来去算距离啊,上一个木吧。那现在我做的对吗?你看我就当的时候,是不是给他付过一次值啊。你说我来过什么?你说我移动过后我来干嘛?那X等于什么?对,不等于even的什么?X last y等于even的Y。
13:09
这就非常简单了。这样是不是它就在移动啊。因为我们的木事件是不断的产生的,也就是说这个木的里面是不断进来的吧。那基本上早就把代码都写差不多了。其实这个地方啊,整体上来说就是什么呢?先不论是当事件还是木事件。我们都要把事件的坐标给它记住吧啊。诶,我们上面好像还一个不见了呢。Last,还有一个。那是X是吧,这其实这两个变量应该是局部变量乘以变量。啊。这不成月变料吧?你要植物面料肯定不行吧?对吧,好,这是个成量啊,这两个变量是成员变量,局部变量。
14:06
是局部就可以啊,啊,这一个是局部变量就可以。好,下面后来呢?当的时候,我是不是第一次给这个last和last y去副词啊?他有人说,你不说上一个吗。关键是你的第一个哪有上一个啊,对不对,你首先要第一次要给他赋值吧,这是第一次给他赋值。好后面木的时候,那我就不断的去计算。是偏移量啊,X轴方向的偏移量。接着呢,去计算出。我们最终的目标是不是让那个视图进行移动啊?这个移动也是在原有的坐标的基础上进行偏移的吧。是这个意思吧。好,你移动以后要做一个事情吗?是不是记住当前的这个坐标为?
15:01
把它记录下来呀。因为这个记录是不是为了下一次做准备啊。嗯,就是这样的一个意思。
我来说两句