先说一下几个要点:
1,首先在Activity中确定展示方式为网格布局,行数设置为2
package com.example.administrator.beautifulgirls; import android.animation.ObjectAnimator; import android.app.Activity; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.DecelerateInterpolator; import android.view.animation.ScaleAnimation; import android.widget.ImageView; import com.squareup.picasso.Picasso; import java.util.Collections; import java.util.List; /** * Created by Liu on 2016/12/2. */ public class HomeActivity extends Activity { private RecyclerView mRecyclerView; private List<String> mDatas; private HomeAdapter mAdapter; private int height =0; private AnimationSet mAnimationSet; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); //设置随机高度 height = (int) (Math.random() * 100); mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview); mRecyclerView.setLayoutManager(new GridLayoutManager(this,2)); mRecyclerView.addItemDecoration(new DividerItemDecoration( this, DividerItemDecoration.HORIZONTAL)); mRecyclerView.addItemDecoration(new SpaceGridItemDecoration(this,5)); mRecyclerView.addItemDecoration(new SpaceListItemDecoration( this,5,true, getResources().getColor(R.color.color_fb5428),false,true,false)); mAdapter= new HomeAdapter(); mRecyclerView.setAdapter(mAdapter); //实现拖拽和删除 setDragAndDelete(); mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { // ... //Toast.makeText(HomeActivity.this, "条目点击:" + position, Toast.LENGTH_SHORT).show(); // 点击放大 LayoutInflater inflater = LayoutInflater.from(HomeActivity.this); View imgEntryView = inflater.inflate(R.layout.dialog_photo_entry, null); // 加载自定义的布局文件 final AlertDialog dialog = new AlertDialog.Builder(HomeActivity.this ).create(); ImageView img = (ImageView) imgEntryView.findViewById(R.id.large_image); Picasso.with(HomeActivity.this). load(mDatas.get(position)).fit() .error(R.mipmap.ic_launcher).into(img); // 这个是加载网络图片的,可以是自己的图片设置方法 dialog.setView(imgEntryView); // 自定义dialog dialog.show(); //增加点击放大效果 AnimationSet animationSet = new AnimationSet(true); if(mAnimationSet!=null && mAnimationSet != animationSet){ ScaleAnimation scaleAnimation = new ScaleAnimation(2,0.5f,2,0.5f, Animation.RELATIVE_TO_PARENT,0.5f,//使用动画播放图片 Animation.RELATIVE_TO_PARENT,0.5f); scaleAnimation.setDuration(500); mAnimationSet.addAnimation(scaleAnimation); mAnimationSet.setFillAfter(false); //让其保持动画结束时的状态。 img.startAnimation(mAnimationSet); } ScaleAnimation scaleAnimation = new ScaleAnimation((float) 0,1f, (float) 0,1f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f); scaleAnimation.setDuration(3000); animationSet.addAnimation(scaleAnimation); animationSet.setFillAfter(true); img.startAnimation(animationSet); mAnimationSet = animationSet; // 点击布局文件(也可以理解为点击大图)后关闭dialog,这里的dialog不需要按钮 imgEntryView.setOnClickListener(new View.OnClickListener() { public void onClick(View paramView) { dialog.cancel(); } }); } @Override public void onItemLongClick(View view, int position) { // ... //Toast.makeText(HomeActivity.this,"条目长按:"+position,Toast.LENGTH_SHORT).show(); } })); } protected void initData() { mDatas= PicResource.getPic(); } class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> { @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder = new MyViewHolder(LayoutInflater.from( HomeActivity.this).inflate(R.layout.item_home, parent, false)); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { //holder.iv_pic.setText(mDatas.get(position)); //默认显示placeholder,加载错误显示ic_launcher,指定placeholder大小显示 Picasso.with(HomeActivity.this). load(mDatas.get(position)).placeholder(R.mipmap.abc).resize(500+height,500+height) .error(R.mipmap.ic_launcher).into(holder.iv_pic); } @Override public int getItemCount() { return mDatas.size(); } class MyViewHolder extends RecyclerView.ViewHolder { ImageView iv_pic; public MyViewHolder(View view) { super(view); iv_pic = (ImageView) view.findViewById(R.id.iv_pic); } } } private void setDragAndDelete() { new ItemTouchHelper(new ItemTouchHelper.Callback() { private RecyclerView.ViewHolder vh; @Override public boolean isItemViewSwipeEnabled() { return true; } @Override public boolean isLongPressDragEnabled() { return true; } @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { // 拖拽的标记,这里允许上下左右四个方向 int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; // 滑动的标记,这里允许左右滑动 int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } /* 这个方法会在某个Item被拖动和移动的时候回调,这里我们用来播放动画,当viewHolder不为空时为选中状态 否则为释放状态 */ @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { super.onSelectedChanged(viewHolder, actionState); if (viewHolder != null) { vh = viewHolder; pickUpAnimation(viewHolder.itemView); } else { if (vh != null) { putDownAnimation(vh.itemView); } } }