首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用视图属性动画工具在网格视图中移动项目

使用视图属性动画工具在网格视图中移动项目
EN

Stack Overflow用户
提问于 2013-08-30 06:25:11
回答 1查看 1.5K关注 0票数 1

我正在学习android中的动画。

我试图构建一个网格视图,当用户每点击两个项目(比如糖果粉碎),项目就会切换位置。

下面是我使用的代码

代码语言:javascript
复制
    myGrid = (GridView) mainView.findViewById(R.id.my_grid);
    myGrid.setAdapter(adapter);
    myGrid.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

            if(mVPosition == null){
                mVPosition = position;
            }
            else{
                   View item1View = v;
                   View item2View = myGrid.getChildAt(mVPosition);

                   int originalPos1[] = new int[2];
                   item1View.getLocationOnScreen( originalPos1 );

                   int originalPos2[] = new int[2];
                   item2View.getLocationOnScreen( originalPos2 );

                   swVId = mThumbIds[position];
                   mThumbIds[position] = mThumbIds[mVPosition];
                   mThumbIds[mVPosition] = swVId;   // Swap items' image
                    // mThumbIds is used as image source of myGrid define in adapter code

                  item1View.animate().x(originalPos1[0]).y(originalPos1[1]).setListener(new AnimatorListener() {
                                    @Override
                                    public void onAnimationStart(Animator animation) {

                                    }
                                    @Override
                                    public void onAnimationRepeat(Animator animation) {
                                    }
                                    @Override
                                    public void onAnimationEnd(Animator animation) {

                                        adapter.notifyDataSetChanged();
                                    }
                                    @Override
                                    public void onAnimationCancel(Animator animation) {

                                    }
                                    }); 

                item2View.animate().x(originalPos2[0]).y(originalPos2[1]).setListener(new AnimatorListener() {
                                    @Override
                                    public void onAnimationStart(Animator animation) {

                                    }
                                    @Override
                                    public void onAnimationRepeat(Animator animation) {
                                    }
                                    @Override
                                    public void onAnimationEnd(Animator animation) {

                                        adapter.notifyDataSetChanged();
                                    }
                                    @Override
                                    public void onAnimationCancel(Animator animation) {

                                    }
                                    }); 
     mVPosition = null;

                }
    });

问题是项目在y方向上的移动不正确。如果我只让它们水平移动,有两个项目会交换位置,但如果我想垂直切换,它们都会向下移动到网格上的某个奇怪位置

而且,移动的项目不能再次单击。

这个问题是否与"adapter.notifyDataSetChanged();“和ViewPropertyAnimation的使用有关?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-01-20 13:21:22

您必须首先通过getLocationOnScreen方法定义网格视图位置,然后从每个项目中减去它,如下所示

代码语言:javascript
复制
int gridLoc[] = new int[2];
myGrid.getLocationOnScreen(gridLoc);
.
.
.
item1View.animate().x(originalPos1[0]-gridLoc[0]).y(originalPos1[1]-gridLoc[1])....
.
.
.
item2View.animate().x(originalPos2[0]-gridLoc[0]).y(originalPos2[1]-gridLoc[1])....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18521937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档