0

私はリサイクラーのビューを持っており、その中にはすべてのアイテムがカードビューです。 アイテムを押したときにカードアイテムを縮小(サイズ変更)し、クリックして拡大するときにスケールします。 CardViewActivity.javaあるAndroidで、リサイクルビューのカードアイテムをクリックダウン/スケールアップする方法を教えてください。

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class CardViewActivity extends AppCompatActivity { 

    private RecyclerView mRecyclerView; 
    private RecyclerView.Adapter mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_card_view); 

     mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     mRecyclerView.setHasFixedSize(true); 
     mLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     mAdapter = new MyRecyclerViewAdapter(getDataSet()); 
     mRecyclerView.setAdapter(mAdapter); 
    } 


    @Override 
    protected void onResume() { 
     super.onResume(); 
     ((MyRecyclerViewAdapter) mAdapter).setOnItemClickListener(new MyRecyclerViewAdapter 
       .MyClickListener() { 
      @Override 
      public void onItemClick(int position, View v) { 
       Toast.makeText(getApplicationContext(), " Clicked on Item " + position, Toast.LENGTH_SHORT).show(); 
      } 

     }); 

     mRecyclerView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       return false; 
      } 
     }); 
     mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
      @Override 
      public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
       return false; 
      } 

      @Override 
      public void onTouchEvent(RecyclerView rv, MotionEvent event) { 

      } 

      @Override 
      public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

      } 
     }); 


    } 

    private ArrayList<DataObject> getDataSet() { 
     ArrayList results = new ArrayList<DataObject>(); 
     for (int index = 0; index < 20; index++) { 
      DataObject obj = new DataObject("Some Primary Text " + index, 
        "Secondary " + index); 
      results.add(index, obj); 
     } 
     return results; 
    } 
} 

MyRecyclerViewAdapter.java

import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class MyRecyclerViewAdapter extends RecyclerView 
     .Adapter<MyRecyclerViewAdapter 
     .DataObjectHolder> { 
    private static String LOG_TAG = "MyRecyclerViewAdapter"; 
    private ArrayList<DataObject> mDataset; 
    private static MyClickListener myClickListener; 

    public static class DataObjectHolder extends RecyclerView.ViewHolder 
      implements View 
      .OnClickListener { 
     TextView label; 
     TextView dateTime; 

     public DataObjectHolder(View itemView) { 
      super(itemView); 
      label = (TextView) itemView.findViewById(R.id.textView); 
      dateTime = (TextView) itemView.findViewById(R.id.textView2); 
      Log.i(LOG_TAG, "Adding Listener"); 
      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      myClickListener.onItemClick(getAdapterPosition(), v); 
     } 
    } 

    public void setOnItemClickListener(MyClickListener myClickListener) { 
     this.myClickListener = myClickListener; 
    } 

    public MyRecyclerViewAdapter(ArrayList<DataObject> myDataset) { 
     mDataset = myDataset; 
    } 

    @Override 
    public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.card_view_row, parent, false); 

     DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
     return dataObjectHolder; 
    } 

    @Override 
    public void onBindViewHolder(DataObjectHolder holder, int position) { 
     holder.label.setText(mDataset.get(position).getmText1()); 
     holder.dateTime.setText(mDataset.get(position).getmText2()); 
    } 

    public void addItem(DataObject dataObj, int index) { 
     mDataset.add(index, dataObj); 
     notifyItemInserted(index); 
    } 

    public void deleteItem(int index) { 
     mDataset.remove(index); 
     notifyItemRemoved(index); 
    } 

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

    public interface MyClickListener { 
     public void onItemClick(int position, View v); 
    } 
} 

card_view_row.xmlから

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

    <android.support.v7.widget.CardView 
     android:id="@+id/card_view" 
     android:layout_width="fill_parent" 
     android:layout_height="100dp" 
     android:layout_gravity="center" 
     android:layout_margin="5dp" 
     card_view:cardCornerRadius="2dp" 
     card_view:contentPadding="10dp"> 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

      <TextView 
       android:id="@+id/textView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" 
       android:textStyle="bold"/> 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/textView" 
       android:layout_marginTop="10dp"/> 
     </RelativeLayout> 
    </android.support.v7.widget.CardView> 


</LinearLayout> 

答えて

0

を押して放し、アクションはRecyclerView.OnItemTouchListener#onTouchで検出することができます:あなたが設定onItemClick()が同様に動作するようにonTouch()

mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 

    //... 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       v.setScale(0.9f); 
       break; 
      case MotionEvent.ACTION_UP: 
       v.setScale(1f); 
       break; 
     } 
     return false; 
    } 

    // ... 

}); 

return falseがイベントを停止しません。あなたが正しい値を返さない場合mRecyclerView.OnTouchListenerがお互いに干渉する可能性が

Animation anim = new ScaleAnimation(/* Scale down/up animation */); 
anim.setFillAfter(true); 
anim.setDuration(/* ... */); 
v.startAnimation(anim); 

mRecyclerView.OnItemTouchListenerことや、アイテムをスケーリングするために最初のものがある:
また、簡単に(詳細hereを見つける。)スケーリングをアニメーション化することができます十分。

関連する問題