动态生成Gallery控件组合实现无限循环自动播放广告图片效果总结

.动态生成布局

1.动态加入RadioGroup,并动态设置布局方式:

LinearLayout indicator = new LinearLayout(context);

int heightPX = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30, g etResources().getDisplayMetrics()); // 这个方法是转变为标准尺寸的一个函数,即这里表示

//30dip

//设置radiogroup父容器的布局

indicator.setLayoutParams(new android.widget.LinearLayout.LayoutParams(android.widget.Lin earLayout.LayoutParams.MATCH_PARENT, heightPX));

indicator.setGravity(Gravity.CENTER);

radioGroup = new RadioGroup(context);

radioGroup.setOrientation(RadioGroup.HORIZONTAL);

//radiogroup加入到父容器中

indicator.addView(radioGroup);

 

2.动态的设置Gallery的布局:

gallery= new MyGallery(context);

Gallery.LayoutParams paramGallery = new Gallery.LayoutParams(Gallery.LayoutParams.MATCH_PARENT,Gallery.LayoutParams.MATCH_PARENT);

gallery.setLayoutParams(paramGallery);

 

3.Gallery控件知识准备: 

gallery.setVerticalFadingEdgeEnabled(false);// 取消竖直渐变边框

gallery.setHorizontalFadingEdgeEnabled(false);// 取消水平渐变边框

gallery.setSpacing(0); //设置两个图片的间隔

gallery.setUnselectedAlpha(0.4f); // 设置未选中项的透明度

 

4.Gallery加入到一个RelativeLayout的父容器中

addView(gallery, new android.widget.RelativeLayout.LayoutParams(

android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,

android.widget.RelativeLayout.LayoutParams.MATCH_PARENT));

 

5.radiobutton加入到gridview父容器的最下面

android.widget.RelativeLayout.LayoutParams param = new android.widget.RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);

param.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

addView(indicator, param);

.无限循环实现

1.设置GlleryAdapter,做如下关键修改:

    @Override

    public int getCount()

    {

        if(drawables != null)

        {

            return Integer.MAX_VALUE;//设置为最大

        }

        else

        {

            return 0;

        }

}

  这一步可以实现gallery可以无限向左滑动,但是还无法无限向右滑动。此时需要第二步;

2.设置初始化时,gallery默认选择在第500:之所以无法向右滑,因为默认选在第一张,肯定不会再往右滑了。这个时候给系统一个假象,说是选在在第500张,这样就可以实现向右滑动效果了:

mGallery.setSelection(500);

 

3.由于这个是个自定义控件,可以在里面写好回调方法,这样可以在调用它的活动中,通过回调接口,捕捉到gallery的点击选项

自定义控件中:

mGallery.setOnItemClickListener(new OnItemClickListener(){

 @Override

 public void onItemClick(AdapterView<?> parent, View view, int position, long id){

    if(position >= len)

      {

         position = position % len;

      }

    if(itemClickListener != null)

      {

        itemClickListener.getItemOnClickListener(position);

      }

   }

});

调用自定义控件的活动中:

playGallery.setAutoPlayListener(new OnAutoPlayItemClickListener(){

   @Override

   public void getItemOnClickListener(int position){

       Toast.makeText(getActivity(), position + "", Toast.LENGTH_SHORT).show();

   }

});

 

.自动播放效果实现:Timmer+TimerTask+Handler

  public void SendTimerTask(){

     if(mSendTimer == null){

       mSendTimer = new Timer();

     }

     mSendTimerTask = new TimerTask(){

       @Override

     public void run(){

       if(flag){

              handler.sendEmptyMessage(0);

             }

}};

//延时0毫秒后重复的执行task,周期是4000毫秒。

    mSendTimer.schedule(mSendTimerTask, 0, 4000);

  } 

 private Handler handler = new Handler(){

 @Override

 public void handleMessage(Message msg){

super.handleMessage(msg);

    int count = mGallery.getFirstVisiblePosition() + 1;

    if(mGallery.isTouched()){

     mGallery.setTouched(false);

     }

indicateImage(count);

}

  };

如果活动结束了,也应该要关闭timmer,节省资源:

public void cleanSendTimerTask(){

   if(mSendTimerTask != null){

     mSendTimerTask.cancel();

     mSendTimerTask = null;

   }

   if(mSendTimer != null){

     mSendTimer.cancel();

     mSendTimer.purge();

     mSendTimer = null;

   }

 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值