Android:Gallery View中的动画?

Leg*_*end 11 android image gallery android-animation

当我使用图库控件,我怎么说图像规模达&焕发被选中并缩小联合国焕发的是未选中的

我见过的所有教程都有这种效果,但我无法看到它......

有什么样的动画我必须附在画廊上吗?

Seb*_*ian 15

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

我发现的是Gallery管理焦点非常糟糕.因此,第一种方法是在ImageView显示的位置添加焦点更改侦听器,但没有运气.焦点是那里的MESS ......就所选择的图像而言,它不是当前聚焦的视图.我已经向android-developers邮件列表发送了一封邮件,内容是关于API doc的一些错误(关于focusSearch()方法和一些焦点内容).

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

构建动画资源以"增长"图像:

<?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"/>
Run Code Online (Sandbox Code Playgroud)

如果你没有得到那意味着那么你应该继续阅读这个

这将是我们的"成长"效果,你需要将它保存在:res/anim/grow.xml或者它为你设置的任何名称(但总是在res/anim目录中).

您可以从此处按照资源指南创建Gallery视图.将ImageAdapter建立一个ImageView使每一次Gallery对象调用getView().你可以实现一个解决方法是添加一行到getView()识别的方法Viewposition,是这样的:

...
i.setId(position);
...
Run Code Online (Sandbox Code Playgroud)

通过将该行添加到对象的getView()方法中ImageAdpater,您可以明确地在侦听器中标识该视图,例如:

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");

    }
    });
Run Code Online (Sandbox Code Playgroud)

注意:您可能会注意到我手边已经选择了动画和布局参数中的所有值.这是因为我不打算为你清理代码.而且,这只是这个小部件或android视图系统的BAD焦点问题的解决方法.如果焦点是正常的话,那么你需要做的就是设置一个焦点变化监听器,当它聚焦/不聚焦时使gros /收缩.

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

问候,

新的编辑:这是我设置的听众,我还增加了线i.clearAnimation()getView()方法:

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) {
    }
}
Run Code Online (Sandbox Code Playgroud)