<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >

    <RelativeLayout
        android:id="@+id/root"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp">

        <RelativeLayout
            android:id="@+id/icon_container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:orientation="vertical">

            <RelativeLayout
                android:id="@+id/icon_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fillAfter="false"
                android:fillEnabled="false"
                android:gravity="center_vertical">

                <ImageView
                    android:id="@+id/bgcircle"
                    android:layout_width="40dp"
                    android:layout_height="40dp"/>

                <ImageView

                    android:id="@+id/icdone"
                    android:layout_width="25dp"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"/>
            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/icon_front"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fillAfter="false"
                android:fillEnabled="false"
                android:gravity="center_vertical">

                <ImageView
                    android:id="@+id/icon_profile"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    app:srcCompat="@drawable/icon_contact"/>

                <TextView
                    android:id="@+id/icon_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:textColor="@android:color/white"
                    android:textSize="22dp"/>
            </RelativeLayout>

        </RelativeLayout>

        <LinearLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toEndOf="@+id/icon_container"
            android:layout_toRightOf="@+id/icon_container"
            android:orientation="vertical"
            android:padding="5dp">


            <RelativeLayout

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/stock_id"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_margin="2dp"
                    android:text="I00005"
                    android:textColor="#2aadff"/>

                <TextView
                    android:id="@+id/price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:layout_gravity="right"
                    android:layout_margin="2dp"
                    android:text="150.00"
                    android:textColor="@android:color/black"/>

            </RelativeLayout>

            <RelativeLayout

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="2dp"
                    android:maxLength="50"
                    android:maxLines="2"
                    android:text="JB.OfficePrint"
                    android:textColor="#2aadff"/>

                <TextView
                    android:id="@+id/qty"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:layout_margin="2dp"
                    android:layout_toEndOf="@id/name"
                    android:layout_toRightOf="@id/name"
                    android:gravity="right"
                    android:text="200"
                    android:textColor="@android:color/black"/>

            </RelativeLayout>

            <RelativeLayout

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/uom"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="2dp"
                    android:text="Manual"
                    android:textColor="#2aadff"/>

            </RelativeLayout>

        </LinearLayout>

    </RelativeLayout>

    <View
        android:id="@+id/line"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@id/root"
        android:background="#888989"/>
</RelativeLayout>

Java File:

public class MultiStockAdapter extends RecyclerView.Adapter<MultiStockAdapter.MyViewHolder> {
    private Context mContext;
    private List<String> messages;
    private MessageAdapterListener listener;
    private SparseBooleanArray selectedItems;

    // array used to perform multiple animation at once
    private SparseBooleanArray animationItemsIndex;
    private boolean reverseAllAnimations = false;
    List<Stock> stockArrayList;
    // index is used to animate only the selected row
    // dirty fix, find a better solution
    private static int currentSelectedIndex = -1;

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
        public TextView message;

        public ImageView iconImp, imgProfile,bgcircle,icdone;
        public LinearLayout messageContainer;
        public RelativeLayout iconContainer, iconBack, iconFront, root;

        public MyViewHolder(View view) {
            super(view);


            iconBack = (RelativeLayout) view.findViewById(R.id.icon_back);
            iconFront = (RelativeLayout) view.findViewById(R.id.icon_front);
            //   iconImp = (ImageView) view.findViewById(R.id.icon_star);
            imgProfile = (ImageView) view.findViewById(R.id.icon_profile);

            bgcircle = (ImageView) view.findViewById(R.id.bgcircle);

            icdone = (ImageView) view.findViewById(R.id.icdone);
            root = (RelativeLayout) view.findViewById(R.id.root);
            iconContainer = (RelativeLayout) view.findViewById(R.id.icon_container);
            message = (TextView) view.findViewById(R.id.name);
            view.setOnLongClickListener(this);

        }

        @Override
        public boolean onLongClick(View view) {
            listener.onRowLongClicked(getAdapterPosition());
            view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
            return true;
        }
    }


    public MultiStockAdapter(Context mContext, List<Stock> stockArrayList, MessageAdapterListener listener) {
        this.mContext = mContext;
        this.stockArrayList = stockArrayList;
        this.listener = listener;
        selectedItems = new SparseBooleanArray();

        animationItemsIndex = new SparseBooleanArray();

    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.from(mContext)
                .inflate(R.layout.stock_list_row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        String message = stockArrayList.get(position).getName();

        // displaying text view data

       // holder.icdone.setImageDrawable(AppCompatResources.getDrawable(mContext,R.drawable.ic_done_white_24dp));
        //holder.bgcircle.setImageDrawable(AppCompatResources.getDrawable(mContext,R.drawable.bg_circle));

    //    holder.imgProfile.setImageDrawable(AppCompatResources.getDrawable(mContext,R.drawable.icon_contact));


        // displaying the first letter of From in icon text
        holder.message.setText(message);

        // change the row state to activated
        holder.itemView.setActivated(selectedItems.get(position, false));


        // handle icon animation
        applyIconAnimation(holder, position);

        // display profile image


        // apply click events
        applyClickEvents(holder, position);
    }

    private void applyClickEvents(final MyViewHolder holder, final int position) {
        holder.iconContainer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onIconClicked(position);

            }
        });


        holder.root.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onIconClicked(position);

            }
        });

    }

    private void applyIconAnimation(MyViewHolder holder, int position) {
        if (selectedItems.get(position, false)) {
            holder.iconFront.setVisibility(View.GONE);
            resetIconYAxis(holder.iconBack);
            holder.iconBack.setVisibility(View.VISIBLE);
            holder.iconBack.setAlpha(1);
            holder.root.setBackgroundColor(ContextCompat.getColor(mContext, R.color.selectcolor));
            if (currentSelectedIndex == position) {
                FlipAnimator.flipView(mContext, holder.iconBack, holder.iconFront, true);
                resetCurrentIndex();

            }

        } else {


            holder.iconBack.setVisibility(View.GONE);
            resetIconYAxis(holder.iconFront);
            holder.iconFront.setVisibility(View.VISIBLE);
            holder.iconFront.setAlpha(1);
            if ((reverseAllAnimations && animationItemsIndex.get(position, false)) || currentSelectedIndex == position) {
                FlipAnimator.flipView(mContext, holder.iconBack, holder.iconFront, false);
                resetCurrentIndex();

            }
            holder.root.setBackgroundColor(ContextCompat.getColor(mContext, R.color.transparent));
        }
    }


    // As the views will be reused, sometimes the icon appears as
    // flipped because older view is reused. Reset the Y-axis to 0
    private void resetIconYAxis(View view) {
        if (view.getRotationY() != 0) {
            view.setRotationY(0);
        }
    }

    public void resetAnimationIndex() {
        reverseAllAnimations = false;
        animationItemsIndex.clear();
    }


    @Override
    public int getItemCount() {
        return stockArrayList.size();
    }

    public void toggleSelection(int pos) {
        currentSelectedIndex = pos;
        if (selectedItems.get(pos, false)) {
            selectedItems.delete(pos);
            animationItemsIndex.delete(pos);
        } else {
            selectedItems.put(pos, true);
            animationItemsIndex.put(pos, true);
        }
        notifyItemChanged(pos);
    }

    public void clearSelections() {
        reverseAllAnimations = true;
        selectedItems.clear();
        notifyDataSetChanged();
    }

    public int getSelectedItemCount() {
        return selectedItems.size();
    }

    public List<Integer> getSelectedItems() {
        List<Integer> items =
                new ArrayList<>(selectedItems.size());
        for (int i = 0; i < selectedItems.size(); i++) {
            items.add(selectedItems.keyAt(i));

        }
        return items;
    }

    public List<Integer> selectAllitem() {
        selectedItems.clear();
        List<Integer> items =
                new ArrayList<>(stockArrayList.size());
        for (int i = 0; i < stockArrayList.size(); i++) {
            items.add(i);
            selectedItems.put(i, true);
        }
        notifyDataSetChanged();
        return items;
    }


    private void resetCurrentIndex() {
        currentSelectedIndex = -1;
    }

    public interface MessageAdapterListener {
        void onIconClicked(int position);


        void onRowLongClicked(int position);
    }


    public ArrayList<Stock> getMultiStock() {

        List<Integer> items = getSelectedItems();
        ArrayList<Stock> multistock = new ArrayList<>();
        for (int i = 0; i < items.size(); i++) {
            multistock.add(stockArrayList.get(items.get(i)));
        }
        return multistock;
    }
}

我使用android studio 3.0并在recyclelerview中使用像gmail这样的动画,但运行时我得到错误inflateException

致命异常:主要android.view.InflateException:二进制XML文件行#0:在android.view.LayoutInflater.rInflate(LayoutInflater.java:android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762)中向类ImageView错误膨胀804)在android.view.LayoutInflater.rInflate(LayoutInflater.java:812)的android.view.LayoutInflater.rInflate(LayoutInflater.java:812),android.view.LayoutInflater.rInflate(LayoutInflater.java:812) . 位于mit.n.Adfter.inflate(LayoutInflater.java:526)的android.view.LayoutInflater.inflate(LayoutInflater.java:426)at mit.com.mm.zarlagamification.adapters.MultiStockAdapter.onCreateViewHolder(MultiStockAdapter.java:89)at mit android.support.v7.widget.RecyclerView上的android.support.v7.widget.RecyclerView $ Adapter.createViewHolder(RecyclerView.java:6365).com.mm.zarlagamification.adapters.MultiStockAdapter.onCreateViewHolder(MultiStockAdapter.java:26)在android.s上的$ Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5563) upport.v7.widget.RecyclerView $ Recycler.getViewForPosition(RecyclerView.java:5448)在android.support.v7.widget.RecyclerView $ Recycler.getViewForPosition(RecyclerView.java:5444)在android.support.v7.widget.LinearLayoutManager $在android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)的android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)上的LayoutState.next(LinearLayoutManager.java:2224) .support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)在android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3600)android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView) .java:3329)在Android.view.Viewout.Lout(ViewGroup,我在android.view.View.::::::????????????????????????????????????????? java:4793)在android.widget.FrameLayout.onLayout(FrameLayout.java:448)的android.view.View.layout(View.java:15213)atr ode.view.ViewGroup.layout(ViewGroup.java:4793)位于android.view.View.ViewGroup的android.view.View.layout(View.java:15213)的android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) .layout(ViewGroup.java:4793)位于android.view.View.Loutout(ViewLayout.java:448)的android.view.View.layout(View.java:15213),位于android.view.ViewGroup.layout(ViewGroup . java:4793)在android.sview.View.Loutout(ActionBarOverlayLayout.java:437)android.view.View.layout(View.java:15213)android.view.ViewGroup.layout(ViewGroup.java)上的android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437) :4793)android.widget.FrameLayout.onLayout(FrameLayout.java:448)android.view.View.layout(View.java:15213)android.view.ViewGroup.layout(ViewGroup.java:4793)at android .widget.LinearLayout.setChildFrame(LinearLayout.java:1677)位于android.view.View.View的android.widget.LinearLayout.onLayout(LinearLayout.java:1440)的android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) . android.view.ViewGroup中的布局(View.java:15213) .layout(ViewGroup.java:4793)位于android.view.View.Loutout(ViewLayout.java:448)的android.view.View.layout(View.java:15213),位于android.view.ViewGroup.layout(ViewGroup . java:4793)在android.view.ViewRootImpl.performLversout(ViewRootImpl.java:2146)的android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1892)在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1131)at android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6286)at android.view.Choreographer $ CallbackRecord.run(Choreographer.java:791)at android.view.Choreographer.doCallbacks(Choreographer.java:591)at android .view.Choreographer.doFrame(Choreographer.java:561)在android.view.Chore上的android.view.Handler.handleCallback(Handler.java:730)的android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:777) . 在android.app.ActivityThread.main(ActivityThread.java:5493)的android.os.Looper.loop(Looper.java:177)上的Handler.dispatchMessage(Handler.java:92)