首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓:画廊视图中的动画?

安卓:画廊视图中的动画?
EN

Stack Overflow用户
提问于 2009-10-13 18:03:28
回答 3查看 27.6K关注 0票数 11

当我使用图片库小部件时,如何获得图像:在被选中时放大了&辉光,而在未选择时缩小了&un-glow<代码>E29?

我见过的所有教程都有这种效果,但我看不见.

是否有某种动画,我必须附加到画廊

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-07 02:37:39

希望这会有帮助。我设法用Gallery小部件“模拟”收缩/增长解决方案。因为他们删除了getScale(),事情变得有点复杂。我认为这不是最好的解决办法,但至少我可以接受。

我所发现的是,Gallery对焦点的管理非常糟糕。因此,第一种方法是在显示的ImageView上添加一个焦点更改监听器,但那里没有运气。集中注意力是一团糟..。也就是说,所选的图像不是当前聚焦的视图。我向android发送了一封邮件,内容涉及API文档上的一些错误(涉及focusSearch()方法和一些焦点内容)。

以下是我对这个问题的解决方案:

构建动画资源,以“增长”图像:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
       android:fromXScale="1.0"
       android:toXScale="1.10"
       android:fromYScale="1.0"
       android:toYScale="1.10"
       android:duration="300"
       android:pivotX="50%"
       android:pivotY="50%"
       android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       android:fillAfter="false"/>

如果你不明白这意味着什么,那么你应该继续读

这将是我们的“增长”效果,您需要将其保存在:res/anim/grow.xml或任何它适合您的名称中(但总是在res/anim中)。

您可以按照这里的资源指南创建一个Gallery视图。每次ImageAdapter对象调用getView()时,Gallery都会生成一个getView()。您可以实现的一个解决方法是向getView()方法中添加一行,该方法用position标识View,方法如下:

代码语言:javascript
复制
...
i.setId(position);
...

如果将该行添加到ImageAdpater对象的ImageAdpater方法中,则可以在侦听器中明确标识该视图,例如:

代码语言:javascript
复制
g.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void  onItemSelected  (AdapterView<?>  parent, View  v, int position, long id) {
        Animation grow = AnimationUtils.loadAnimation(YourActivity.this, R.anim.grow);

        View sideView = parent.findViewById(position - 1);
        if (sideView != null)
           ((ImageView)sideView).setLayoutParams(new Gallery.LayoutParams(150, 100));

        sideView = parent.findViewById(position + 1);
        if (sideView != null)
           ((ImageView)sideView).setLayoutParams(new Gallery.LayoutParams(150, 100));

        v.startAnimation(grow);
        v.setLayoutParams(new Gallery.LayoutParams(170, 150));
    }

    public void  onNothingSelected  (AdapterView<?>  parent) {
        System.out.println("NOTHING SELECTED");

    }
    });

注意:您可能会注意到,来自动画和布局参数的所有值都是由我在手边选择的。这是因为我不会为你清理代码。而且,这只是解决这个小部件或android视图系统的焦点问题的一个方法。如果焦点没有问题,那么,您所需要做的就是设置一个焦点更改监听器,当它获得焦点/非焦点时,这个监听器会使gros/收缩。

我希望这能帮你找到解决问题的方法,

致以敬意,

新编辑:这是我设置的侦听器,我还在getView()方法中添加了行getView()

代码语言:javascript
复制
private class SelectListener implements AdapterView.OnItemSelectedListener {
     private Animation grow;
     private int last;

     public SelectListener() {
        grow = AnimationUtils.loadAnimation(RouteGallery.this, R.anim.grow);
        last = 0;
     }

     public void  onItemSelected  (AdapterView<?>  parent, View  v, int position, long id) {
        View sideView = parent.findViewById(last);
        if (sideView != null && last != position)
           sideView.clearAnimation();

        v.startAnimation(grow);
        last = position;
     }

    public void  onNothingSelected  (AdapterView<?>  parent) {
    }
}
票数 15
EN

Stack Overflow用户

发布于 2009-10-14 12:33:44

您需要使用ImageSwitcher。ImageSwitcher有设置输入和输出动画的方法(当图像被选中和取消选择,或者被选中和替换时)。

以下链接有一个关于如何与画廊一起使用它的好教程。

票数 4
EN

Stack Overflow用户

发布于 2012-10-23 13:44:14

我实现了类似的动画:

代码语言:javascript
复制
final Animation shrink = AnimationUtils.loadAnimation(activity, R.anim.shrink);
shrink.setFillAfter(true);

gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            // This iterates through the views which are currently displayed on screen.
            for (int k=0; k<gallery.getChildCount(); k++){
                // Do whatever else you want, here.
                // This is how you get a particular element of a view
                ImageView background = (ImageView) gallery.getChildAt(k).findViewById(R.id.menu_item_background);

                //clear animation
                gallery.getChildAt(k).clearAnimation();

            }

            // Scale the selected one
            view.startAnimation(shrink);

        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {}

    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1561938

复制
相关文章

相似问题

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