Android使用Recyclerview實(shí)現(xiàn)圖片水平自動(dòng)循環(huán)滾動(dòng)效果
簡(jiǎn)介:
本篇博客主要介紹的是如何使用RecyclerView實(shí)現(xiàn)圖片水平方向自動(dòng)循環(huán)(跑馬燈效果)
效果圖:

思路:
1.準(zhǔn)備m張圖片
1.使用Recyclerview實(shí)現(xiàn),返回?zé)o數(shù)個(gè)(實(shí)際Interge.MAXVALUE)item,第n個(gè)item顯示第n%m張圖片
3.使用recyclerview.scrollBy 每個(gè)一段時(shí)間水平滾動(dòng)一段距離
4.通過(guò)layoutManager.findFirstVisibleItemPosition()獲取當(dāng)前顯示的第一個(gè)View是第幾個(gè)item,上面的ImageView顯示對(duì)應(yīng)de圖片
實(shí)現(xiàn)代碼:
XML文件
1.activity布局文件activity_recy.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"> <ImageView android:layout_width="300dp" android:layout_height="350dp" android:layout_gravity="center_horizontal" android:id="@+id/img" android:src="@drawable/p5" android:scaleType="fitXY" /> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="150dp" android:layout_marginTop="10dp" android:id="@+id/recyclerview" ></android.support.v7.widget.RecyclerView> </LinearLayout>
2.適配器布局item_horizon.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:layout_width="100dp" android:layout_height="match_parent" android:id="@+id/img" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:scaleType="fitXY" /> </LinearLayout>
Activity
public class HorizontalActivity extends AppCompatActivity implements RecyAdapter.OnItemClickListener {
private String TAG="HorizontalActivity";
@BindView(R.id.img)
ImageView img;
@BindView(R.id.recyclerview)
RecyclerView recyclerview;
private Integer[] mImgIds = {R.drawable.p1, R.drawable.p2, R.drawable.p3, R.drawable.p4, R.drawable.p5,
R.drawable.pic1, R.drawable.pic5, R.drawable.pic6};
private List<Integer> datas;
private RecyAdapter recyAdapter;
private Handler mHandler=new Handler();
private LinearLayoutManager layoutManager;
private int oldItem=0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recy);
ButterKnife.bind(this);
initData();
initRecy();
img.setImageResource(datas.get(0));
recyAdapter.setOnItemClickListener(this);
}
Runnable scrollRunnable=new Runnable() {
@Override
public void run() {
recyclerview.scrollBy(3,0);
// int firstItem = layoutManager.findFirstVisibleItemPosition();
int firstItem=layoutManager.findFirstVisibleItemPosition();
if(firstItem!=oldItem&&firstItem>0){
oldItem=firstItem;
img.setImageResource(datas.get(oldItem%datas.size()));
}
Log.e(TAG, "run: firstItem:"+firstItem );
mHandler.postDelayed(scrollRunnable,10);
}
};
private void initRecy() {
recyAdapter=new RecyAdapter(this,datas);
layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerview.setLayoutManager(layoutManager);
recyclerview.setAdapter(recyAdapter);
}
private void initData() {
datas=new ArrayList<>();
for (int i = 0; i <mImgIds.length ; i++) {
datas.add(mImgIds[i]);
}
}
@Override
protected void onResume() {
super.onResume();
mHandler.postDelayed(scrollRunnable,10);
}
@Override
protected void onStop() {
super.onStop();
mHandler.removeCallbacks(scrollRunnable);
}
@Override
public void onItemClick(View view, int tag) {
Toast.makeText(this,"第"+tag+"張圖片被點(diǎn)擊了",Toast.LENGTH_SHORT).show();
}
}
適配器RecyAdapter
public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.ViewHolder> implements View.OnClickListener {
private Context context;
private List<Integer> datas;
private OnItemClickListener onItemClickListener;
public RecyAdapter(Context context, List<Integer> datas) {
this.context = context;
this.datas = datas;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal, parent, false);
ViewHolder vh=new ViewHolder(view);
view.setOnClickListener(this);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
int newPos=position%datas.size();
holder.img.setImageResource(datas.get(newPos));
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
@Override
public void onClick(View view) {
if(onItemClickListener!=null){
onItemClickListener.onItemClick(view, (Integer) view.getTag());
}
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView img;
public ViewHolder(View itemView) {
super(itemView);
img=itemView.findViewById(R.id.img);
}
}
public void setOnItemClickListener(OnItemClickListener listener){
this.onItemClickListener=listener;
}
interface OnItemClickListener{
void onItemClick(View view,int tag);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- RecyclerView實(shí)現(xiàn)縱向和橫向滾動(dòng)
- RecyclerView實(shí)現(xiàn)抖音縱向滾動(dòng)ViewPager效果
- Android RecyclerView 滾動(dòng)到中間位置的方法示例
- Android RecyclerView 實(shí)現(xiàn)快速滾動(dòng)的示例代碼
- XRecyclerView實(shí)現(xiàn)下拉刷新、滾動(dòng)到底部加載更多等功能
- Android_RecyclerView實(shí)現(xiàn)上下滾動(dòng)廣告條實(shí)例(帶圖片)
- Android中RecyclerView實(shí)現(xiàn)分頁(yè)滾動(dòng)的方法詳解
- Android使用RecyclerView實(shí)現(xiàn)水平滾動(dòng)控件
- Android代碼實(shí)現(xiàn)AdapterViews和RecyclerView無(wú)限滾動(dòng)
- RecyclerView實(shí)現(xiàn)橫向滾動(dòng)效果
相關(guān)文章
Android 實(shí)現(xiàn)當(dāng)下最流行的吸頂效果
本文主要介紹了Android 實(shí)現(xiàn)當(dāng)下最流行的吸頂效果的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-03-03
Android?Flutter實(shí)現(xiàn)"斑馬紋"背景的示例代碼
本文將通過(guò)實(shí)現(xiàn)一個(gè)canvas繪制斑馬紋類。使用Stack布局,將斑馬紋放在下方作為背景板,需要展示的內(nèi)容在上方。從而實(shí)現(xiàn)?“斑馬紋”背景,感興趣的可以了解一下2022-06-06
Android基于ImageView繪制的開(kāi)關(guān)按鈕效果示例
這篇文章主要介紹了Android基于ImageView繪制的開(kāi)關(guān)按鈕效果,結(jié)合實(shí)例形式分析了Android使用ImageView進(jìn)行按鈕繪制的界面布局、功能實(shí)現(xiàn)及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-03-03
Android權(quán)限如何禁止以及友好提示用戶開(kāi)通必要權(quán)限詳解
這篇文章主要給大家介紹了關(guān)于Android權(quán)限如何禁止以及友好提示用戶開(kāi)通必要權(quán)限的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Android實(shí)現(xiàn)圖片在屏幕內(nèi)縮放和移動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android控制圖片在屏幕內(nèi)縮放和移動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02

