图片的handler指示器实现

获取类的时候又一个返回值

private final int SUCCESS_CODE=1;
private int status;

public boolean isSuccess(){
    return status==SUCCESS_CODE;
}

MainActivity

private ViewPager viewPager;
    private TextView textView;
    private LinearLayout yuan;
    private ViewPagerAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    viewPager=findViewById(R.id.viewpager);
    textView=findViewById(R.id.textView);
    yuan=findViewById(R.id.yuan);

    adapter = new ViewPagerAdapter(this);
    viewPager.setAdapter(adapter);

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        //缓存的点
        private int cacheIndex=-1;


        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }

        @Override
        public void onPageSelected(int i) {

            textView.setText(adapter.getItem(i).getNews_title());
            yuan.getChildAt(i%yuan.getChildCount()).setSelected(true);
            if(cacheIndex>=0) {
                yuan.getChildAt(cacheIndex % yuan.getChildCount()).setSelected(false);
            }
            cacheIndex=i;
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
    loadData();

}

private String dataUrl="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";

private void loadData() {

    Util.getInstance().getRequset(dataUrl, UsersBean.class, new Util.CallBack<UsersBean>() {
        @Override
        public void onSuccess(UsersBean o) {
            if(o==null||!o.isSuccess()){
                Toast.makeText(MainActivity.this,"错误",Toast.LENGTH_LONG).show();
                return;
            }
            adapter.setDatas(o.getData());
            initDot(o.getData().size());
            Log.i("TEST",""+o.getData().size());
            int center=adapter.getCount()/2;
            center = center - center % o.getData().size();
            viewPager.setCurrentItem(center);
            //开启轮播
            startlooper();
        }


    });

}

@SuppressLint("HandlerLeak")
private Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
        handler.sendEmptyMessageDelayed(0,1000);
    }
};

private void startlooper() {

    handler.removeMessages(0);
    handler.sendEmptyMessageDelayed(0,1000);
}

//初始化小圆点
private void initDot(int size) {
    yuan.removeAllViews();
    for (int i = 0; i < size; i++) {
        ImageView imageView = new ImageView(this);
        imageView.setBackgroundResource(R.drawable.selector_dot);
        //布局参数: 宽高包裹  左右8dp
        LinearLayout.LayoutParams params =
                new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
        int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics());
        params.leftMargin = margin;
        params.rightMargin = margin;
        yuan.addView(imageView, params);
    }
}

App

ImageLoader.getInstance().init(
                new ImageLoaderConfiguration.Builder(this)
                        .memoryCacheSizePercentage(10)
                        .discCacheSize(50 * 1024 * 1024)
                        .defaultDisplayImageOptions(
                                new DisplayImageOptions.Builder()
                                        .showImageOnFail(R.mipmap.ic_launcher)
                                        .showImageOnLoading(R.mipmap.ic_launcher)
                                        .cacheInMemory(true)
                                        .cacheOnDisk(true)
                                        .build()
                        )
                        .build()
        );

ViewPagerAdapter

private List<UsersBean.Data> data;
    private Context context;

public ViewPagerAdapter(Context context) {
    this.context = context;
    data=new ArrayList<>();
}
@Override
public int getCount() {
    return data.size()>0?5000:0;
}

public UsersBean.Data getItem(int position){
    return data.get(position%data.size());
}

public void setDatas(List<UsersBean.Data> datas) {
    data.clear();
    if (datas != null) {
        data.addAll(datas);
    }
    notifyDataSetChanged();
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
    return view==o;
}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    ImageView imageView = new ImageView(context);
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    container.addView(imageView);
    ImageLoader.getInstance().displayImage(getItem(position).getPic_url(),imageView);

    return imageView;
}

@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    container.removeView((View) object);
}

selector

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_sel_dot" android:state_selected="true" />
    <item android:drawable="@drawable/shape_normal_dot" />
</selector>

shape

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:width="8dp"
        android:height="8dp" />
    <solid android:color="#909090" />
</shape>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:width="8dp"
        android:height="8dp" />
    <solid android:color="#900000" />
</shape>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android Studio中实现图片轮播可以通过以下步骤: 1. 导入图片资源:将需要轮播的图片添加到项目的资源文件夹中,通常是在`res`目录下的`drawable`文件夹中。 2. 创建布局文件:在`res/layout`目录下创建一个新的布局文件,例如`activity_main.xml`。在布局文件中添加一个`ImageView`用于显示轮播的图片。 3. 添加ViewPager:在布局文件中添加一个`ViewPager`控件,用于实现图片的轮播效果。可以使用`androidx.viewpager.widget.ViewPager`来引入ViewPager。 4. 创建适配器:创建一个适配器类,继承自`androidx.fragment.app.FragmentPagerAdapter`,用于管理ViewPager中的图片片段。 5. 创建图片片段:创建一个图片片段类,继承自`androidx.fragment.app.Fragment`,用于显示单张图片。 6. 实现适配器方法:在适配器类中实现必要的方法,例如`getCount()`返回图片数量,`getItem()`返回指定位置的图片片段。 7. 设置适配器:在Activity或Fragment中找到ViewPager控件,并设置适配器。 8. 设置轮播效果:可以使用定时器或者Handler实现图片的自动切换效果。在Activity或Fragment中使用定时器或Handler来定时切换ViewPager的当前项。 9. 添加指示器(可选):如果需要显示图片轮播的指示器,可以在布局文件中添加一个指示器控件,例如`ViewPagerIndicator`。 10. 监听点击事件(可选):如果需要监听图片的点击事件,可以在图片片段中为ImageView设置点击监听器,并在监听器中处理点击事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值