使用RecyclerView横向滑动实现仿到位的滑动(写的不好,还有未解决的地方)

来源:互联网 发布:交通仿真软件怎么用 编辑:程序博客网 时间:2024/05/16 12:48
import android.app.Activity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by guo */public class HorRecyclerActivity extends Activity {    List<String> strings = new ArrayList<String>();    private RecyclerView mRecyclerView;    private RecycleAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_recyclerview);        mRecyclerView = (RecyclerView) findViewById(R.id.activity_recycler_view);        final TextView textView = (TextView) findViewById(R.id.activity_recycler_tv);        for (int i = 0; i < 50; i++) {            strings.add(i + "item");        }        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);        mRecyclerView.setLayoutManager(linearLayoutManager);        //设置适配器        mAdapter = new RecycleAdapter(this, strings);        mRecyclerView.setAdapter(mAdapter);        mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                //暂停的时候才能去定位item                if (newState == RecyclerView.SCROLL_STATE_IDLE) {                    mRecyclerView.scrollToPosition(getCurrentPosition());                    textView.setText(String.valueOf(getMiddlePosition()));                }            }            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);            }        });    }    /**     * 获取中间位置     *     * @return 当前值     */    private int getMiddlePosition() {        return getCurrentPosition() + (RecycleAdapter.ITEM_COLUMN / 2);    }    /**     * 获取滑动当前索引, 滑动偏移 / 每个滑动item宽度     *     * @return 当前值     */    private int getCurrentPosition() {        return (int) ((double) (mRecyclerView.computeHorizontalScrollOffset())                / (double) mAdapter.getScreenWidth());    }}
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/** * Created by guo */public class RecycleAdapter extends RecyclerView.Adapter {    private Context mContext;    private List<String> mStrings;    /**     * 一行显示几列     */    public static final int ITEM_COLUMN = 1;    public RecycleAdapter(Context context, List<String> strings) {        this.mContext = context;        this.mStrings = strings;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(mContext).inflate(R.layout.item_cardview, parent, false);        RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams();        lp.width = getScreenWidth();        return new ViewHolder(view);    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        if (holder != null) {            setChildView((ViewHolder) holder, mStrings.get(position));        }    }    private void setChildView(ViewHolder holder, String str) {        holder.card2.setText(str);    }    @Override    public int getItemCount() {        return mStrings == null || mStrings.isEmpty() ? 0 : mStrings.size();    }    public static class ViewHolder extends RecyclerView.ViewHolder {        TextView card2;        public ViewHolder(View itemView) {            super(itemView);            card2 = (TextView) itemView.findViewById(R.id.item_card_2);        }    }    // 获取屏幕宽度    public int getScreenWidth() {        DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();        return displayMetrics.widthPixels / ITEM_COLUMN;    }}
 关于RecyclerView还有很多的使用方法,更多的需要你去探究,本文参考下面这个博文写的 http://www.jianshu.com/p/4a647f6cbe42

0 0
原创粉丝点击