一.动态生成布局
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.设置Gllery的Adapter,做如下关键修改:
@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;
}
}