Android首页轮播图和滚动广告条

=====首页轮播图=====

第一步:首先我用到的是第三方控件,导入到gradle即可

compile 'com.youth.banner:banner:1.4.9'

第二步:绑定控件什么的我就不说了,直接设置Banner轮播图的属性了

--xml写入的

<com.youth.banner.Banner
                        android:id="@+id/banner"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_parant"/>
private ArrayList list_path;
list_path = new ArrayList<>();
        //放标题的集合
        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic21363tj30ci08ct96.jpg");
        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic259ohaj30ci08c74r.jpg");
        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2b16zuj30ci08cwf4.jpg");
        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2e7vsaj30ci08cglz.jpg");
        //设置图片加载器,图片加载器在下方
        banner.setImageLoader(new MyLoader());
        //设置图片网址或地址的集合
        banner.setImages(list_path);
        //设置轮播间隔时间
        banner.setDelayTime(5000);
        //设置是否为自动轮播,默认是“是”。
        banner.isAutoPlay(true);
        //设置指示器的位置,小点点,左中右。
        banner.setIndicatorGravity(BannerConfig.CENTER)
                //以上内容都可写成链式布局,这是轮播图的监听。比较重要。方法在下面。
                .setOnBannerListener(this)
                //必须最后调用的方法,启动轮播图。
                .start();

这边找的网络图片,放到集合里,用banner在下方加载,自定义一个MyLoader()图片加载器方法,用的是Glide

//自定义的图片加载器
    private class MyLoader extends ImageLoader {
        @Override
        public void displayImage(Context context, Object path, ImageView imageView) {
            Glide.with(context).load((String) path).into(imageView);
            Glide.with(context).load((String) path).placeholder(R.drawable.error)//图片加载出来前,显示的图片
                    .error(R.drawable.error)//图片加载失败后,显示的图
                    .into(imageView);
        }
    }

别忘记导入Glide

compile 'com.github.bumptech.glide:glide:3.7.0'

!!Ok啦,首页轮播图就完成了,如果需要加载后台传来的图片,只需要改setImages放入后台传来的数据集合就可以了!!



=====滚动广告条=====

在这里,我写了一个自定义控件。。

public class NoticeView extends ViewFlipper implements View.OnClickListener {
    private Context mContext;
    private List mNotices;
    private OnNoticeClickListener mOnNoticeClickListener;

    public NoticeView(Context context) {
        super(context);
    }

    public NoticeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    private void init(Context context) {
        mContext = context;
        //轮播间隔时间3s
        setFlipInterval(3000);

        //设置动画
        setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.in));
        setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.out));
    }

    public void addNotice(List notices) {
        mNotices = notices;
        removeAllViews();
        for (int i = 0; i < mNotices.size(); i++) {
            // 根据公告内容构建一个TextView
            String notice = notices.get(i);
            TextView textView = new TextView(mContext);
            textView.setSingleLine();
            textView.setText(notice);
            textView.setTextSize(13f);
            textView.setEllipsize(TextUtils.TruncateAt.END);
            textView.setTextColor(Color.parseColor("#666666"));
            textView.setGravity(Gravity.CENTER_VERTICAL);
            // 将公告的位置设置为textView的tag方便点击是回调给用户
            textView.setTag(i);
            textView.setOnClickListener(this);
            //添加到ViewPlipper
            NoticeView.this.addView(textView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        }
    }

    @Override
    public void onClick(View v) {
        int position = (int) v.getTag();
        String notice = mNotices.get(position);
        if (mOnNoticeClickListener != null) {
            mOnNoticeClickListener.onNoticeClick(position, notice);
        }
    }

    /**
     * 通知点击监听接口
     */
    public interface OnNoticeClickListener {
        void onNoticeClick(int position, String notice);
    }

    /**
     * 设置通知点击监听器
     *
     * @param onNoticeClickListener 通知点击监听器
     */
    public void setmOnNoticeClickListener(OnNoticeClickListener onNoticeClickListener) {
        mOnNoticeClickListener = onNoticeClickListener;
    }

    private int dp2px(float dpValue) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, mContext.getResources().getDisplayMetrics());
    }
}

在XML中直接引用即可。

然后再Activity中,添加属性:

NoticeView noticeView = findViewById(R.id.notice);
        List notices = new ArrayList<>();
        notices.add("大促销下单拆福袋,亿万新年红斑随便拿");
        notices.add("家电五折团,抢十亿无门槛现金红包");
        notices.add("星球大战剃须刀首发送200元代金券");
        noticeView.addNotice(notices);
        noticeView.startFlipping();

动画的话,直接贴代码,很简单的

in.xml

xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1500"
        android:fromYDelta="100%p"
        android:toYDelta="0">
    translate>
set>

out.xml

xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1500"
        android:fromYDelta="0"
        android:toYDelta="-100%p">
    translate>
set>

别忘了在res文件下,创建一个anim文件夹,把这两个放入该文件夹下哦

收工收工,回家睡觉咯

你可能感兴趣的:(Android首页轮播图和滚动广告条)