论坛首页 移动开发技术论坛

[so easy~]Gallery 模仿Flash广告栏~!附源码

浏览 2784 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-19  


先上个效果图~

 

思路是这样的,功能方面:

首先这个是个左右循环的Gallery(其实是Integer.MAX_VALUE = 2147483647 这么多的个啦,接近无限了)。

这个网上有很多,不再赘述。代码里面也有,可以直接下载~

然后就是Gallery的样式,我这里 设置成无阴影的,间距 android:spacing="0dip"。

最后就是下面的指示条了,我使用FrameLayout布局,里面的指示点 radiobuttion.(因为只要一个是点亮的,用于指示当前位置,所以在一个group中)

 

下面是重要代码:

 

布局:

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
  <FrameLayout
            android:layout_width="fill_parent"
            android:layout_height="150dip" >

            <com.test.AdvGallery
                 android:fadingEdge="none" 
                android:id="@+id/home_advs_gallery"	
                android:spacing="0dip"
                android:layout_width="fill_parent"
                android:layout_height="150dip" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="20dip"
                android:layout_gravity="bottom"
                android:background="#55999999"
                android:gravity="center"
                android:orientation="horizontal" >

                <RadioGroup
                    android:gravity="center"
                    android:id="@+id/home_advs_gallery_mark"
                    android:orientation="horizontal"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content" >
         
                </RadioGroup>
            </LinearLayout>
        </FrameLayout>

</LinearLayout>
 

 

自定义Gallery,为了解决Gallery拖拽滑动过快:

 

 

public class AdvGallery extends Gallery {
	public AdvGallery(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
	

	public AdvGallery(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
			//返回false 解决Gallery拖拽滑动过快
		return false;
	}

	@Override
	public void setUnselectedAlpha(float unselectedAlpha) {
		// TODO Auto-generated method stub
		unselectedAlpha = 1.0f;
		super.setUnselectedAlpha(unselectedAlpha);
	}
	
	

 

 

adapter中的 getview方法:

 

 

@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
			ImageView imageView = new ImageView(context);  
			String curr_URL = imgURL.get(position%imgURL.size());
			imageView.setTag(curr_URL);
			 Drawable cachedImage = asyncImageLoader.loadDrawable(context,curr_URL,new ImageCallback1() {
		        	@Override
		        	public void imageLoaded(Drawable imageDrawable, String imageUrl) {
		                ImageView imageViewByTag = (ImageView) gallery.findViewWithTag(imageUrl);
		                if (imageViewByTag != null && imageDrawable != null ) { 
		                    imageViewByTag.setImageDrawable(imageDrawable);
		                    notifyDataSetChanged();
		                }
		            }
		        });
			 if (cachedImage != null) {
	        	  imageView.setImageDrawable(cachedImage);
	        }else{
	        	imageView.setImageResource(R.drawable.ic_launcher);
	        }
			// 设置边界对齐
			 imageView.setAdjustViewBounds(true);
			 imageView.setLayoutParams(new Gallery.LayoutParams(
					LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
			//设置比例类型  
//			 imageView.setScaleType(ImageView.ScaleType.FIT_XY);
		return imageView;
	}

 

 

main中的oncreate:

 

 

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        _radioGroup = (RadioGroup) findViewById(R.id.home_advs_gallery_mark);
        _adv_Gallery = (Gallery) findViewById(R.id.home_advs_gallery);
        _advGalleryAdapter = new AdvGalleryAdapter(ADV_GalleryActivity.this,_adv_imgURL,_adv_Gallery);
        
		_adv_Gallery.setAdapter(_advGalleryAdapter);
		_adv_Gallery.setSelection(Integer.MAX_VALUE >> 1);
    	_adv_Gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				// TODO Auto-generated method stub
				_radioGroup.check(arg2%_adv_imgURL.size()); //Gallery焦点图片改变时 更改RadioGroup
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub
			}

		});	
    	//图片地址
    	_adv_imgURL.add("http://www.baidu.com/img/baidu_sylogo1.gif");
		_adv_imgURL.add("http://www.iteye.com/images/logo.gif?1308833136");
		_adv_imgURL.add("http://csdnimg.cn/www/images/csdnindex_logo.gif");
		
		for(int i=0;i<_adv_imgURL.size();i++){
			RadioButton rb = new RadioButton(ADV_GalleryActivity.this);
			rb.setId(i);
			rb.setButtonDrawable(R.drawable.adv_gallery_mark_selector);
			rb.setClickable(false);
			_radioGroup.addView(rb);
		}
		
    }

 

 

由于代码比较多,放上源码,希望大家能用到~!

 

  • 大小: 141.4 KB
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics