在实现CardView
并尝试将动画应用于箭头文本视图后,当单击箭头时,动画显示异常行为。如何修复动画并获得与预期动画图像相似的结果?
预期动画
当前动画
回收视图项目
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:id="@+id/cv"
android:layout_marginBottom="20dp"
>
<LinearLayout
android:id="@+id/cardview_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:animateLayoutChanges="true">
<LinearLayout
android:id="@+id/cardview_titlerow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="2dp"
android:weightSum="100">
<TextView
android:id="@+id/tv_A"
android:layout_weight="90"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@android:style/TextAppearance.Medium" />
<TextView
android:id="@+id/tv_expandcollapsearrow"
android:clickable="true"
android:focusable="true"
android:layout_weight="10"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textColor="@android:color/white"
style="@android:style/TextAppearance.Medium" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/tv_B"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/TextAppearance.Large"
/>
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
MyRecyclerAdapter。JAVA
public class MyRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private Context mContext;
RecyclerViewHeader header;
List<MyRecyclerItem> listItems;
private Animation animationCollapse;
private Animation animationExpand;
public MyRecyclerAdapter(Context context, RecyclerViewHeader header, List<MyRecyclerItem> listItems)
{
this.mContext = context;
this.header = header;
this.listItems = listItems;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == TYPE_HEADER)
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_header_expandcollapsebuttons, parent, false);
return new MyRecyclerAdapter.VHHeader(v);
}
else if(viewType == TYPE_ITEM)
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item, parent, false);
return new MyRecyclerAdapter.VHItem(v);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
private MyRecyclerItem getItem(int position)
{
return listItems.get(position);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final Typeface iconFont = FontManager.getTypeface(mContext, FontManager.FONTAWESOME);
if (holder instanceof VHHeader)
{
VHHeader VHheader = (VHHeader)holder;
}
else if (holder instanceof VHItem)
{
RecyclerViewListItemTransportConnections currentItem = getItem(position-1);
final VHItem VHitem = (VHItem)holder;
VHitem.txtA.setText(currentItem.getConnectionMode());
VHitem.txtB.setText(currentItem.getConnectionName());
VHitem.txtB.setVisibility(View.GONE);
VHitem.txtExpandCollapseArrow.setText(R.string.fa_icon_chevron_down);
VHitem.txtExpandCollapseArrow.setTypeface(iconFont);
VHitem.txtExpandCollapseArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (VHitem.txtB.getVisibility() == View.VISIBLE) {
VHitem.txtB.setVisibility(View.GONE);
RotateAnimation rotate = new RotateAnimation(180, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotate.setDuration(300);
rotate.setInterpolator(new LinearInterpolator());
VHitem.txtExpandCollapseArrow.startAnimation(rotate);
VHitem.txtExpandCollapseArrow.setText(R.string.fa_icon_chevron_down);
} else {
VHitem.txtB.setVisibility(View.VISIBLE);
RotateAnimation rotate = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotate.setDuration(300);
rotate.setInterpolator(new LinearInterpolator());
VHitem.txtExpandCollapseArrow.startAnimation(rotate);
TransitionManager.beginDelayedTransition(VHitem.cardview);
VHitem.txtExpandCollapseArrow.setText(R.string.fa_icon_chevron_up);
}
}
});
}
}
@Override
public int getItemViewType(int position) {
if(isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
private boolean isPositionHeader(int position)
{
return position == 0;
}
@Override
public int getItemCount() {
return listItems.size()+1;
}
class VHHeader extends RecyclerView.ViewHolder{
public VHHeader(View itemView) {
super(itemView);
}
}
class VHItem extends RecyclerView.ViewHolder{
CardView cardview;
TextView txtExpandCollapseArrow, txtA, txtB;
public VHItem(View itemView) {
super(itemView);
this.cardview = itemView.findViewById(R.id.cv);
this.txtExpandCollapseArrow = itemView.findViewById(R.id.tv_expandcollapsearrow);
this.txtA = itemView.findViewById(R.id.tv_A);
this.txtB = itemView.findViewById(R.id.tv_B);
}
}
}
苏拉布的建议
预期的动画似乎是一个矢量可绘制动画,而您所遵循的方法将为视图而不是可绘制动画设置动画。
您需要使用动画矢量drawable来实现所需的结果。
一种更简单的方法是设置可隐藏视图的可见性,并使用TransitionManager
设置这些布局更改的动画。
TransitionManager.beginDelayedTransition(rootView)
// rootView can be the container view of all cards
这将考虑增加卡的高度和减弱这些视图。我不确定它是否也能旋转箭头,但你可以试试。或者你也可以使用RotateAnimation
所以Eclipse正在工作windows安装了一些更新并重新启动了我的计算机,然后突然eclipse不工作了。我已经用它做了一些尝试,我的java类路径是正确的,我相信但是eclipse仍然只会显示启动屏幕,然后立即关闭。 除非我使用-debug-consoleLog标记运行它,否则它似乎工作正常。你知道怎么解决这个问题吗? 编辑: 所以当我用调试控制台日志标签启动它时,日志是这样写的 这是我的日
我正在尝试以伪分布式模式安装Hadoop2.2.0。当我试图启动datanode服务时,它显示了以下错误,有人能告诉我如何解决这个问题吗?
我用的是Hibernate4.3.10,最后是mysql 5.6。 对于刷新模式,默认为“自动”,对吗?在本例中,如果有关于持久化A、选择B、提交的步骤,那么hibernate应该先执行选择B,然后执行持久化A,对吗? (我的理解是基于https://dzone.com/articles/dark-side-hibernate-auto-flush,还是我误解了这篇文章?) 如果我的理解是正确的,
假设我有以下层次结构: 1级活动(例如主菜单) 2级活动(如日历) 3级活动(如日历日) 存在以下用例: 深入人心 需要以下过渡行为: 用例1 3:我希望旧活动从左侧滑出,新活动从右侧滑入 用例2:我希望旧活动滑出到右侧,新活动滑入到左侧 我尝试了很多方法来使用来实现这一点,但没有一个组合可以正常工作...我被以下内容卡住了: 动画(这些应该正常工作): SlideFromLeftIn: Slid
问题内容: 我想在html页面中的给定textarea元素上模拟keydown事件。由于我使用的是chrome,因此我调用了变量,然后将要键入的keyCode传递到了textarea中。这是我尝试过的: 在这段代码中,我输入字母,但是textarea只得到keyCode ,这是关键。因此,我尝试了在线看到的覆盖代码,该代码将值设置为keyCodeVal,但没有成功 有谁知道如何设置keyCode值
问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火