使用RecyclerView橫向滑動實現仿到位的滑動(寫的不好,還有未解決的地方)



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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章