安卓:动画图库视图?
-
21-09-2019 - |
题
当我使用画廊插件上,如何获取图像说的扩展&发光被选中和按比例缩小的强>&的未辉光在被未选?
我见过的所有教程有这种效果,但我没能看到它... ...
是否有某种类型的动画,我必须重视的图片
解决方案
希望这是有帮助的。我设法“模拟”与Gallery
插件的收缩/成长的解决方案。由于他们删除getScale()
,事情变得有点复杂。我认为这是不是最好的解决办法可言,但至少我可以住在一起。
我发现的是,Gallery
管理的焦点极其恶劣。因此,第一种方法是添加上显示的ImageView
的焦点变化监听器,但没有运气。福克斯是一个烂摊子那里......在这方面,所选择的图像这不是当前焦点视图。我发出邮件到Android的开发者邮件有关API文档的一些错误列表(关于focusSearch()
method有的侧重contants)。
下面是我解决这个问题:
构建动画资源为“成长”的图像:
<?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 /阿尼姆DIR)
...
i.setId(position);
...
使用该行添加到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");
}
});
请注意:您可能会注意到,从动画和布局参数所有的值已经在我手上了choosen。这是因为我不打算清理代码为您服务。而且,这仅仅是一个解决办法与这个小部件或Android设备上查看系统的BAD焦点问题。如果焦点都行,那么,所有你需要做的是设置一个焦点变化监听器,使格罗斯/收缩当它得到了集中/聚焦。
我希望这可以帮助你找到解决你的问题的一种方式,
此致
新编辑:这是我已经设置该侦听器,我还添加了行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) {
}
}
其他提示
您需要使用ImageSwitcher。该ImageSwitcher具有用于在设置和动画出(当选择的图像和取消选择,或选择和替换)。
的方法在以下链接对如何结合廊使用一个很好的教程。
我实现了一个类似的动画像这样:
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) {}
});