之前一度想放弃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; } } }