Android自定义控件:广告条效果

Android自定义控件:广告条效果,第1张

概述一、效果展示Android自定义控件:广告栏效果二、ListView和ViewPager的使用步骤(1)ListView的使用在布局文件中定义ListView在代码中实例化ListView准备数据设置适配器–item布局–绑定数据(2)ViewPager的使用在布局文件中定义ViewPager在代码中实例化ViewPager准备数据 一、效果展示

<iframe allowfullscreen="true" data-mediaembed="bilibili" ID="cu3TyYH0-1616760405861" src="https://player.bilibili.com/player.HTML?aID=289784656"></iframe>

AndroID自定义控件:广告栏效果

二、ListVIEw和VIEwPager的使用步骤(1)ListVIEw的使用在布局文件中定义ListVIEw在代码中实例化ListVIEw准备数据设置适配器–item布局–绑定数据(2)VIEwPager的使用在布局文件中定义VIEwPager在代码中实例化VIEwPager准备数据设置适配器(PagerAdapter)–item布局–绑定数据三、广告条效果(1)activity_guanggaotiao.xml布局文件
<?xml version="1.0" enCoding="utf-8"?><relativeLayout    xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"><!--    定义一个VIEwPager-->    <androIDx.vIEwpager.Widget.VIEwPager        androID:ID="@+ID/vIEwpager"        androID:layout_wIDth="match_parent"        androID:layout_height="180dp" />    <linearLayout        androID:background="#44000000"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:orIEntation="vertical"        androID:padding="5dp"        androID:layout_alignBottom="@ID/vIEwpager"><!--        设置标题-->        <TextVIEw            androID:ID="@+ID/tv_Title"            androID:layout_gravity="center_horizontal"            androID:padding="3dp"            androID:text="这是一个TextVIEw"            androID:textcolor="#ffffff"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"/><!--        用来安放滑动的点-->        <linearLayout            androID:ID="@+ID/ll_point_group"            androID:layout_gravity="center_horizontal"            androID:orIEntation="horizontal"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"/>    </linearLayout></relativeLayout>
(2)Guanggaotiao.java文件
package com.swpuiot.test;import androID.os.Bundle;import androID.os.Handler;import androID.os.Message;import androID.util.Log;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ImageVIEw;import androID.Widget.linearLayout;import androID.Widget.TextVIEw;import androID.Widget.Toast;import androIDx.annotation.NonNull;import androIDx.annotation.Nullable;import androIDx.appcompat.app.Actionbar;import androIDx.appcompat.app.AppCompatActivity;import androIDx.vIEwpager.Widget.PagerAdapter;import androIDx.vIEwpager.Widget.VIEwPager;import java.util.ArrayList;public class Guanggaotiao extends AppCompatActivity {    //设置一个标签    private static final String TAG = Guanggaotiao.class.getSimplename();    //定义布局文件中需要用到的变量    private VIEwPager vIEwPager;    private TextVIEw tv_Title;    private linearLayout ll_point_group;    //定义图片列表    private ArrayList<ImageVIEw> imageVIEws;    //图片资源ID    private final int[] imageIDs = {            R.drawable.a,            R.drawable.b,            R.drawable.c,            R.drawable.d,            R.drawable.e    };    //图片标题集合    private final String[] imageDescriptions = {            "风景美如画",            "桂林山水甲天下",            "阳朔山水甲桂林",            "行千里致广大",            "绿水青山就是金山银山"    };    //上一次圆点高亮显示的位置    private int preposition = 0;    //是否已经滚动    private boolean isDragging= false;    //利用handler让子线程延迟4秒通知主线程更新ui到VIEwPager的下一张图片    private Handler handler = new Handler(){        @OverrIDe        public voID handleMessage(@NonNull Message msg) {            super.handleMessage(msg);            int item = vIEwPager.getCurrentItem()+1;            vIEwPager.setCurrentItem(item);            //延迟发消息            handler.sendEmptyMessageDelayed(0,4000);        }    };    @OverrIDe    protected voID onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_guanggaotiao);        //将系统自带的标题栏去掉        Actionbar actionbar = getSupportActionbar();        actionbar.hIDe();        //调用实例化布局控件的方法        initVIEw();        //实例化图片列表        imageVIEws = new ArrayList<>();        for (int i = 0; i < imageIDs.length; i++) {            ImageVIEw imageVIEw = new ImageVIEw(this);            imageVIEw.setBackgroundResource(imageIDs[i]);            //将设置了图片资源的imageVIEw添加到imageVIEws图片列表中            imageVIEws.add(imageVIEw);            //动态添加点            ImageVIEw point = new ImageVIEw(this);            point.setBackgroundResource(R.drawable.point_selector);            linearLayout.LayoutParams params = new linearLayout.LayoutParams(8,8);            //第一个默认是红色            if(i == 0){                point.setEnabled(true);            }else{                //不是第一个的话,将点设置成灰色,距左边控件8dp                point.setEnabled(false);                params.leftmargin = 8;            }            //每个点的参数wIDth=8 height=8            point.setLayoutParams(params);            //将点添加到linearLayout中            ll_point_group.addVIEw(point);        }        //4. 设置适配器(PagerAdapter)-item布局-绑定数据        vIEwPager.setAdapter(new MyPagerAdapter());        //设置监听VIEwPager页面的改变        vIEwPager.addOnPagechangelistener(new MyOnPagechangelistener());        //设置中间位置,左右都能够滑动,需要保证item为imageVIEws.size()的整数倍        int item = Integer.MAX_VALUE/2 - Integer.MAX_VALUE/2%imageVIEws.size();        vIEwPager.setCurrentItem(item);        tv_Title.setText(imageDescriptions[preposition]);        //隔3秒钟发消息        handler.sendEmptyMessageDelayed(0,3000);    }    //实例化布局控件的方法    private voID initVIEw() {        vIEwPager = findVIEwByID(R.ID.vIEwpager);        tv_Title = findVIEwByID(R.ID.tv_Title);        ll_point_group = findVIEwByID(R.ID.ll_point_group);    }    //自定义监听VIEwPager页面的改变的类    class MyOnPagechangelistener implements VIEwPager.OnPagechangelistener{        /**         * 当页面滚动了的时候回调这个方法         * @param position  当前页面的位置         * @param positionOffset    滑动页面的百分比         * @param positionOffsetPixels  在屏幕上滑动的像素         */        @OverrIDe        public voID onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {        }        /**         * 当某个页面被选中了的时候回调         * @param position  被选中页面的位置         */        @OverrIDe        public voID onPageSelected(int position) {            int realposition = position%imageVIEws.size();            //设置对应页面的文本信息            tv_Title.setText(imageDescriptions[realposition]);            //把上一个高亮的设置为默认-灰色            ll_point_group.getChildAt(preposition).setEnabled(false);            //当前的设置为高亮-红色            ll_point_group.getChildAt(realposition).setEnabled(true);            preposition = realposition;        }        /**         * 当页面滚动状态变化的时候回调这个方法         * 静止 -> 滑动         * 滑动 -> 静止         * 静止 -> 拖拽         * @param state         */        @OverrIDe        public voID onPageScrollStateChanged(int state) {            if(state == VIEwPager.SCRolL_STATE_DRAGGING){                isDragging = true;                Log.e(TAG, "SCRolL_STATE_DRAGGING---------------------- ");            }else if(state == VIEwPager.SCRolL_STATE_SETTliNG){                Log.e(TAG, "onPageScrollStateChanged---------------------- ");            }else if(state == VIEwPager.SCRolL_STATE_IDLE && isDragging){                isDragging = false;                Log.e(TAG, "onPageScrollStateChanged---------------------- ");                handler.removeCallbacksAndMessages(null);                handler.sendEmptyMessageDelayed(0,4000);            }        }    }    //自定义viewPager适配器的类    class MyPagerAdapter extends PagerAdapter {        /**         * 相当于getVIEw方法         * @param container VIEwPager自身         * @param position  当前实例化页面的位置         * @return         */        @NonNull        @OverrIDe        public Object instantiateItem(@NonNull VIEwGroup container, int position) {            int realposition = position%imageVIEws.size();            final ImageVIEw imageVIEw = imageVIEws.get(realposition);            //添加到VIEwPager中            container.addVIEw(imageVIEw);            Log.e(TAG, "instantiateItem==" + position + ",---imageVIEw==" + imageVIEw);            //添加触摸事件            imageVIEw.setontouchListener(new VIEw.OntouchListener() {                @OverrIDe                public boolean ontouch(VIEw vIEw, MotionEvent motionEvent) {                    switch (motionEvent.getAction()){                        //手指按下控件                        case MotionEvent.ACTION_DOWN:                            Log.e(TAG, "ontouch: 手指按下");                            handler.removeCallbacksAndMessages(null);                            break;                        //手指在控件上移动                        case MotionEvent.ACTION_CANCEL:                            Log.e(TAG, "ontouch: 事件取消");                            handler.removeCallbacksAndMessages(null);                            handler.sendEmptyMessageDelayed(0,4000);                            break;                        //手指离开                        case MotionEvent.ACTION_UP:                            Log.e(TAG, "ontouch: 手指离开");                            handler.sendEmptyMessageDelayed(0,4000);                            break;                    }                    return false;                }            });            //添加点击事件            imageVIEw.setTag(position);            imageVIEw.setonClickListener(new VIEw.OnClickListener() {                @OverrIDe                public voID onClick(VIEw vIEw) {                    Log.e(TAG, "onClick: 点击事件");                    int position = (int) vIEw.getTag()%imageVIEws.size();                    String text = imageDescriptions[position];                    Toast.makeText(Guanggaotiao.this, "text==" + text, Toast.LENGTH_SHORT).show();                }            });            return imageVIEw;        }        /**         * 释放资源         * @param container vIEwpager         * @param position  要释放的位置         * @param object    要释放的页面         */        @OverrIDe        public voID destroyItem(@NonNull VIEwGroup container, int position, @NonNull Object object) {            Log.e(TAG, "destroyItem==" + position + ",---object==" + object);            container.removeVIEw((VIEw) object);        }        /**         * 得到图片总数         * @return         */        @OverrIDe        public int getCount() {//            return imageVIEws.size();            //将数值返回很大,以便于能够左右无限滑动            return Integer.MAX_VALUE;        }        /**         * 比较vIEw和object是否同一个实例         * @param vIEw  页面         * @param object    方法instantiateItem返回的结果         * @return         */        @OverrIDe        public boolean isVIEwFromObject(@NonNull VIEw vIEw, @NonNull Object object) {            return vIEw == object;        }    }}
(3)其中涉及到的drawable文件point_selector.xml、point_normal.xml和point_presss.xmlpoint_selector.xml
<?xml version="1.0" enCoding="utf-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID">    <item androID:state_enabled="false" androID:drawable="@drawable/point_normal"/>    <item androID:state_enabled="true" androID:drawable="@drawable/point_press"/></selector>
point_normal.xml
<?xml version="1.0" enCoding="utf-8"?><shape xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:shape="oval">    <size androID:wIDth="8dp" androID:height="8dp"/>    <solID androID:color="#44000000"/></shape>
point_press.xml
<?xml version="1.0" enCoding="utf-8"?><shape xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:shape="oval">    <size androID:height="8dp" androID:wIDth="8dp"/>    <solID androID:color="#ff0000"/></shape>
总结

以上是内存溢出为你收集整理的Android自定义控件:广告条效果全部内容,希望文章能够帮你解决Android自定义控件:广告条效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1025584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存