我想为ListView项首次出现时制作动画。我有以下观察者:
public class SimpleViewHolder extends RecyclerView.ViewHolder
{
private TextView simpleTextView;
public SimpleViewHolder(final View itemView, final SimpleAdapter.onItemClickListener listener)
{
super(itemView);
simpleTextView = (TextView) itemView.findViewById(R.id.simple_text);
RotateAnimation rotate = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
rotate.setDuration(1000);
rotate.setRepeatCount( 0 );
simpleTextView.setAnimation(rotate);
}
public void bindData(final SimpleViewModel viewModel)
{
simpleTextView.setText( viewModel.getSimpleText() );
}
}
一切正常,除了不是通过编程方式设置动画外,我想使用以下方法从XML文件中加载它们:
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.myanimation);
但是我不清楚如何将上下文获取/传递给RecyclerView.ViewHolder,或者这是否是制作动画的合适位置。
如何在RecyclerView.ViewHolder中加载XML动画,这是为列表项制作动画的正确位置吗?谢谢!
答案 0 :(得分:1)
您可以使用itemView.getContext()
来获取上下文
答案 1 :(得分:0)
我不同意动画的摆放位置。我认为这是正确的地方。关于上下文,我将其发送到构造函数中。
public SimpleViewHolder(final View itemView, final SimpleAdapter.onItemClickListener listener, Context context) {
//use this context...
}
如果您的Recyclerview没有上下文,那么您也可以将上下文传递到Recycleview。我认为没有其他方法可以解决
答案 2 :(得分:0)
获取Context
的正确方法可能是例如。在onLongClick()
的实现中:
@Override
public boolean onLongClick(View viewHolder) {
this.mRecyclerView = (SomeLinearView) viewHolder.getParent();
Context context;
if(viewHolder.isInEditMode()) {
context = ((ContextThemeWrapper) this.mRecyclerView.getContext()).getBaseContext();
} else {
context = this.mRecyclerView.getContext();
}
}
,并且在编辑模式(XML预览)下不会崩溃。将所有变量声明为final
只是无用的,并且通常会受到阻碍,除非需要这样做,因为更改了范围。
并且可以同样地应用布局动画:
int resId = R.anim.some_animation;
LayoutAnimationController animation = AnimationUtils.loadLayoutAnimation(context, resId);
this.mRecyclerView.setLayoutAnimation(animation);