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()
识别的方法View
有position
,是这样的:
...
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)
归档时间: |
|
查看次数: |
27433 次 |
最近记录: |