gpt4 book ai didi

Android:画廊 View 中的动画?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:45 26 4
gpt4 key购买 nike

当我使用图库小部件时,如何让图像在被选中时显示放大发光以及未选中时缩小不发光

我看过的所有教程都有这个效果,但是我看不到...

我必须将某种动画附加到图库吗?

最佳答案

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

我发现 Gallery 对焦点的管理非常糟糕。因此,第一种方法是在显示的 ImageView 上添加焦点更改监听器,但没有成功。那里的焦点是一团糟……换句话说,所选图像不是当前聚焦的 View 。我已经向 android-developers 邮件列表发送了一封关于 API 文档错误的邮件(关于 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"/>

如果您不明白那是什么意思,那么您应该继续阅读 this

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

您可以按照 here 中的资源指南进行操作创建一个 Gallery View 。每次 Gallery 对象调用 getView() 时,ImageAdapter 都会构建一个 ImageView。您可以实现的一种解决方法是向 getView() 方法添加一行,以标识具有 positionView,这样:

...
i.setId(position);
...

将这一行添加到 ImageAdpater 对象的 getView() 方法后,您就可以在监听器中明确识别该 View ,例如:

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 View 系统的 BAD 焦点问题的解决方法。如果焦点没问题,那么,您需要做的就是设置一个焦点更改监听器,在它获得焦点/未聚焦时进行粗略/缩小。

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

问候,

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

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) {
}
}

关于Android:画廊 View 中的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com