整理下最近在做的android5.0的代码,留用

之前一度想放弃android,可能是因为感觉累了,感觉方了,也可能是因为外界言论太多,一度想放弃android学习H5。

一直很迷茫,不知道该做什么,上班下班,2点一线...

跑题了,整理下最近看的关于5.0的代码,其实不错,更新了5.0之后,感觉android的界面终于可以和ios一拼了,加油!


1,首先是jar包的引入:

  compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile 'com.android.support:palette-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'

2,recyclerview的使用:

  2.1-xml代码为:

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


    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
2.2-java代码:

package lytest.lht.ly.lyandroidtest.DropRecyleView;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;

import java.util.ArrayList;

import lytest.lht.ly.lyandroidtest.BaseClass.BaseActivity;
import lytest.lht.ly.lyandroidtest.DropRecyleView.DropHelper.OnStartDragListener;
import lytest.lht.ly.lyandroidtest.DropRecyleView.DropHelper.SimpleItemTouchHelperCallback;
import lytest.lht.ly.lyandroidtest.R;
import lytest.lht.ly.lyandroidtest.adapter.RecAdapter;
import lytest.lht.ly.lyandroidtest.adapter.RecItemSpace;

/**
 * Created by Ly on 2016/4/16.
 */
public class L_DropView extends BaseActivity implements OnStartDragListener {
    private RecyclerView recyclerview;


    private ArrayList<String> StringList;
    private RecAdapter recAdapter;

    private ItemTouchHelper itemTouchHelper;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.l_dropview);
        assignViews();
        StringList = new ArrayList<String>();
        for (int i = 0; i < 19; i++) {
            StringList.add("");
        }
        LinearLayoutManager linearLayoutManager =
                new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        recyclerview.setLayoutManager(linearLayoutManager);
        recAdapter = new RecAdapter(L_DropView.this, this);
        recyclerview.setItemAnimator(new DefaultItemAnimator());
        recyclerview.addItemDecoration(new RecItemSpace());
        ItemTouchHelper.Callback callback =
                new SimpleItemTouchHelperCallback(recAdapter);
        itemTouchHelper = new ItemTouchHelper(callback);
        itemTouchHelper.attachToRecyclerView(recyclerview);
        recyclerview.setAdapter(recAdapter);
        recAdapter.AddData(StringList);
    }

    private void assignViews() {
        recyclerview = (RecyclerView) findViewById(R.id.recyclerview);
    }

    public static void ToDropView(Context context) {
        Intent DropView = new Intent(context, L_DropView.class);
        context.startActivity(DropView);
    }


    @Override
    public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
        itemTouchHelper.startDrag(viewHolder);
    }
}
值得注意的是,引入view后,跟之前的listview一样,要有自己的设配器,除此之后,如果没有给他设置Manager的话,可能会报空指针异常,这个问题要注意,一开始接触的时候很容易会忘了这个,而这个Manager就是其精髓了,设置不同的Manager可以实现不同的效果,如listview,gridview,甚至瀑布流,而上述代码则是实现了拖拽布局。我贴上适配器代码:

package lytest.lht.ly.lyandroidtest.adapter;

import android.content.Context;
import android.graphics.Color;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Collections;

import lytest.lht.ly.lyandroidtest.DropRecyleView.DropHelper.ItemTouchHelperAdapter;
import lytest.lht.ly.lyandroidtest.DropRecyleView.DropHelper.ItemTouchHelperViewHolder;
import lytest.lht.ly.lyandroidtest.DropRecyleView.DropHelper.OnStartDragListener;
import lytest.lht.ly.lyandroidtest.R;

/**
 * Created by Ly on 2016/4/16.
 */
public class RecAdapter extends RecyclerView.Adapter<RecAdapter.LHolder>
        implements ItemTouchHelperAdapter {
    private Context context;
    private final OnStartDragListener onStartDragListener;
    private ArrayList<String> mList = new ArrayList<String>();

    public RecAdapter(OnStartDragListener onStartDragListener, Context context) {
        this.onStartDragListener = onStartDragListener;
        this.context = context;
    }

    @Override
    public LHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.rcy_item, null);
        return new LHolder(view);
    }

    public void AddData(ArrayList<String> mList) {
        this.mList.addAll(mList);
        notifyDataSetChanged();
    }

    @Override
    public void onBindViewHolder(final LHolder holder, int position) {

        holder.itemView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
                    onStartDragListener.onStartDrag(holder);
                }
                return false;
            }
        });
    }

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

    @Override
    public boolean onItemMove(int fromPosition, int toPosition) {
        Collections.swap(mList, fromPosition, toPosition);
        notifyItemMoved(fromPosition, toPosition);
        return false;
    }

    @Override
    public void onItemDismiss(int position) {
        mList.remove(position);
        notifyItemRemoved(position);
    }

    public class LHolder extends RecyclerView.ViewHolder
            implements ItemTouchHelperViewHolder {
        private ImageView rcv_imageview;
        private TextView rcv_textview;

        public LHolder(View itemView) {
            super(itemView);
            rcv_imageview = (ImageView) itemView.findViewById(R.id.rcv_imageview);
            rcv_textview = (TextView) itemView.findViewById(R.id.rcv_textview);
        }

        @Override
        public void onItemSelected() {
            itemView.setBackgroundColor(Color.LTGRAY);
        }

        @Override
        public void onItemClear() {
            itemView.setBackgroundColor(0);
        }
    }
}

然后运行后你会发现,我的天,竟然没有间隔,不怕不怕,因为这个也是我们可以自己设置的,这里我写了一个很简单的设置(这个也是精髓,瀑布流就是通过玩转这个东西实现的)

package lytest.lht.ly.lyandroidtest.adapter;

import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
 * Created by Ly on 2016/4/16.
 */
public class RecItemSpace extends RecyclerView.ItemDecoration {
    public RecItemSpace() {

    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        if (parent.getChildAdapterPosition(view)!=0){
            outRect.top = 15;
        }
    }
}

这样在除了第一个item之外的每个,对于上一个元素都会有15个单位的间隔

整理下最近在做的android5.0的代码,留用_第1张图片整理下最近在做的android5.0的代码,留用_第2张图片

你可能感兴趣的:(整理下最近在做的android5.0的代码,留用)