博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Androd开发之广告栏设计
阅读量:4329 次
发布时间:2019-06-06

本文共 5811 字,大约阅读时间需要 19 分钟。

  对于做Android开发的工程师对于这个效果的实现一定不陌生,本篇我将带领大家先简单实现这个效果,再为大家介绍一下其中的原理,方便新手学习,老手复习,内容简单易懂,没有基础一样学习,不扯没用的了,下面开始我们本篇内容的干货。

  对于这个效果的实现,第一次接触时倍感困难,在之前的博客中为大家介绍了如何实现引导页效果,虽然带领大家实现了上述功能,但是对于具体的实现,其实内心有疑惑的,当初不是什么的清楚其中的原理,经过这些天的不懈努力,终于被我攻破了,开始介绍一下实现的原理:1、既然是广告效果,一定需要图片切换;2、图片切换要有标识,方便用户查看;3、图片切换要实现自动内容切换。这三点中最难的当属后两个了,在之前的文章中我已经带领大家实现过第一个效果了,有兴趣的小童鞋可以自行学习。

  我们开始今天的工作,首先我们需要准备6张图片(两张圆点图片+四张任意图片),用于我们实现的需要。对于圆点图片大家有时间不容易找,我为大家提供两种参考:

  白色:

  蓝色:

  仅供参考,大家如果有更好的,请绕道。

  准备好素材后,下面我们开始设计我们的代码:

  一、在res下新建一个drawable文件夹,在其中新建一个round.xml,用于我们上面两张图片切换显示控制,具体代码如下:

  二、下面我们开始我们的布局文件书写:

   注释:蓝色标注处表示LinearLayout至于界面底部;红色标注处表示应用我们配置好的图片信息,现在我们的界面效果是看不出来的,因为ImagerView我设置了销毁属性(android:visibility="gone"),这个不影响,在下面的代码中我们来控制显示。

  三、我们实现图片切换时,用到了PagerAdapter,这里为了方便我们设计代码,我设计了一个自定义的PagerAdapter对象:MyselfPagerAdapter.java:

public class MyselfPagerAdapter extends PagerAdapter {        private List
view; public MyselfPagerAdapter(List
view){ this.view = view; } @Override public int getCount() { if(view!=null){ return view.size(); } return 0; } @Override //销毁position位置的界面 public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(view.get(position)); } @Override //初始化position位置的界面 public Object instantiateItem(View container, int position) { ((ViewPager) container).addView(view.get(position)); return view.get(position); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } }

  下面就是我们今天的重头戏了:MainActivity.java,先看代码,下面做解释。

public class MainActivity extends Activity implements OnPageChangeListener, OnClickListener{        private ViewPager vp;    private MyselfPagerAdapter myselfPagerAdapter;    private List
listView; private ImageView[] round; private static final int [] imagerResource = {R.drawable.imager1, R.drawable.imager2, R.drawable.imager3, R.drawable.imager4}; public int currentIndex = 0; private Handler handler = new Handler(); public MyRunnable myRunnable = new MyRunnable(); public boolean flag = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); init(); vp = (ViewPager) findViewById(R.id.viewPager); myselfPagerAdapter = new MyselfPagerAdapter(listView); vp.setAdapter(myselfPagerAdapter); vp.setOnPageChangeListener(this); //初始化底部小点 initRound(); handler.postDelayed(myRunnable, 3000); } private void init() { listView = new ArrayList
(); for(int i = 0; i
=imagerResource.length){ return; } vp.setCurrentItem(position); } private void setRoundView(int position){ if(position<0||position>=imagerResource.length||currentIndex==position){ return; } round[position].setSelected(true); round[currentIndex].setSelected(false); currentIndex = position; } @Override //当滑动状态改变时调用 public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override //当前页面被滑动时调用 public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override //当新的页面被选中时调用 public void onPageSelected(int arg0) { // TODO Auto-generated method stub setRoundView(arg0); } @Override public void onClick(View v) { int position = (Integer)v.getTag(); setCurView(position); setRoundView(position); } class MyRunnable implements Runnable{ @Override public void run() { int n = currentIndex; if(n == imagerResource.length-1){ flag = false; }else{ if(n == 0){ flag = true; } } if(flag){ n = (n + 1)%listView.size(); }else{ n = (n - 1)%listView.size(); } setCurView(n); setRoundView(n); handler.postDelayed(myRunnable, 3000); } }}

  这两段代码的作用:为我们添加ImagerView的点击事件做铺垫

private void setCurView(int position){        if(position<0||position>=imagerResource.length){            return;        }        vp.setCurrentItem(position);    }        private void setRoundView(int position){        if(position<0||position>=imagerResource.length||currentIndex==position){            return;        }        round[position].setSelected(true);        round[currentIndex].setSelected(false);        currentIndex = position;    }

  这段代码的作用:实现图片的自动切换,有别于平常的切换,大家运行自行查看:

class MyRunnable implements Runnable{        @Override        public void run() {            int n = currentIndex;                        if(n == imagerResource.length-1){                flag = false;            }else{                if(n == 0){                    flag = true;                }            }            if(flag){                n = (n + 1)%listView.size();            }else{                n = (n - 1)%listView.size();            }                        setCurView(n);            setRoundView(n);            handler.postDelayed(myRunnable, 3000);        }            }

  最后附一张效果图,供大家参考:

  

  今天的介绍就到这里,大家有什么疑问,请留言。

  

  

转载于:https://www.cnblogs.com/AndroidJotting/p/4540637.html

你可能感兴趣的文章
android学习笔记45——android的数据存储和IO
查看>>
mysql 安装完以后没有mysql服务
查看>>
REP report开发技巧
查看>>
js-ES6学习笔记-编程风格(2)
查看>>
从相册中取图片
查看>>
hdu1874畅通工程再续
查看>>
无线网络不受到攻击与窃听的几个小诀窍
查看>>
JDK中的Timer和TimerTask详解
查看>>
OC2-xml文件解析
查看>>
改变Eclipse 中代码字体大小
查看>>
第五章例题
查看>>
小议 HashMap
查看>>
Docker配置镜像源(windows)
查看>>
MyEclipse安装JS代码提示(Spket插件)
查看>>
QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息...
查看>>
laravel 视图流程控制,if switch for loop
查看>>
Java自学资料——线程
查看>>
Microsoft Visual C++ Runtime Library Runtime Error解决的方式
查看>>
四、Linux/UNIX操作命令积累【chmod、chown、tail】
查看>>
盘点几种喜好“嘲讽”老罗的人
查看>>