`
seya
  • 浏览: 360623 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

android gallery和Animation组合使用, 看美女美图

阅读更多
今天主要探究Gallery和Animation的使用。 制作一个美女图片集锦。


1. 首先需要做一个列表, 用来显示类别:
public class CategoryActivity extends Activity implements OnItemClickListener{
	private ListView mList;
	LayoutInflater mInflater;
	
	private Integer[] title = {
			R.string.jingxuan,
			R.string.mingxing,
			R.string.xinggan,
			R.string.cosplay,
			R.string.socks,
			R.string.more
	};
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.category_list);
        mList = (ListView) findViewById(R.id.category_list);
        long time = System.currentTimeMillis();
        if (time%3==0) {
        	mList.setBackgroundResource(R.drawable.longze2);
        } else if (time%3==1){
        	mList.setBackgroundResource(R.drawable.pic02);
        } else {
        	mList.setBackgroundResource(R.drawable.pic05);
        }
        mInflater = LayoutInflater.from(this);
        mList.setAdapter(new TitleAdapter(this));
        mList.setOnItemClickListener(this);
        
           }

...
需要自定义个一个TitleAdapter集成BaseAdapter,
private class TitleAdapter extends BaseAdapter {

    	private Context mContext;
    	
    	
    	public TitleAdapter(Context context) {
    		mContext = context;
    	}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return title.length;
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return title[arg0];
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder vh = null;
			
			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.category_item, null);
				
				vh = new ViewHolder();
				vh.titleView = (TextView) convertView.findViewById(R.id.cate_title);
				
				//hilight the last 'more' title
				if (position == title.length -1) {
					vh.titleView.setTextColor(CategoryActivity.this.getResources().getColor(R.color.red));
				}
				convertView.setTag(vh);
			} else {
				vh = (ViewHolder) convertView.getTag();
			}
			
			//set image resource
			vh.titleView.setText(title[position]);
			
			return convertView;
		}
		
		/**
		 * holder for caching UI component
		 * @author hp
		 *
		 */
		class ViewHolder {
			public TextView titleView;
		}
    	
    }

使用ViewHolder的好处就是对控件进行缓存, 以便下次取方便,提高访问效率。

2. 接下来就是对类别中的美女图片的显示了,
定义xml布局文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<ImageView android:id="@+id/large_image"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    />

    <TextView android:id="@+id/tip"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:text="@string/slide_tip"
        android:gravity="center_vertical"
        android:textColor="#dd0000"
        android:layout_above="@+id/gallery"/>
   
    <Gallery
        android:id="@+id/gallery"
        android:layout_width="fill_parent"
        android:layout_height="60dp"
        android:gravity="center"
        android:padding="5dp"
        android:layout_alignParentBottom="true"
        android:paddingBottom="10dp"       />
<LinearLayout
            android:id="@+id/miniAdLinearLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            />
</RelativeLayout>

类代码如下:
public class ViewActivity extends Activity implements OnItemSelectedListener {
	private Gallery mGallery;
	private ImageAdapter mAdapter;
	LayoutInflater mInflater;
	
	private ImageView largeView;
	
	private Animation mAnimation;
	
	private int categoryId;
	
	private String imgDir = "";
	
	private Bitmap[] imageUri;
	
	private int showCount = 0;
	
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.setTitle(getIntent().getIntExtra(Constants.KEY_TITLE, R.string.app_name));
        mGallery = (Gallery) findViewById(R.id.gallery);
        mInflater = LayoutInflater.from(this);
        
        mAdapter = new ImageAdapter(this);
        
        largeView = (ImageView) findViewById(R.id.large_image);
        largeView.setScaleType(ImageView.ScaleType.FIT_XY);
        mAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha_ani);
        largeView.startAnimation(mAnimation);
        
    }
    
    
    public void onResume() {
    	super.onResume();
    	showCount++;
    	
    	if (getIntent().getBooleanExtra(Constants.KEY_AD, false)) {
    		if (showCount == 1) {
    			AppConnect.getInstance(this).showOffers(this);
    		}
    	} else {
    		//build from asset
            initFromIntent();
            mGallery.setAdapter(mAdapter);
            mGallery.setOnItemSelectedListener(this);
    	}
    	}
    
    private void initFromIntent() {
    	//set title
    	Intent intent = getIntent();
    	
    	categoryId = getIntent().getIntExtra(Constants.KEY_CATEGORY, 0);
    	String basePath = "images/";
    	switch (categoryId) {
    	//suggest hot images
    	case 0:
    		imgDir = "jingxuantuijian";
    		break;
    		
    	//super starts	
    	case 1:
    		imgDir = "mingxing";
    		break;
    	
    	//sexy girls
    	case 2:
    		imgDir = "xinggan";
    		break;
    		
    	//cosplay 
    	case 3:
    		imgDir = "cosplay";
    		break;
    	case 4:
    		imgDir = "socks";
    		break;
    	default:
    		imgDir = "xinggan";
    		break;
    	}
    	
    	try {
    		basePath += imgDir;
    		AssetManager am = this.getAssets();
			String[] files = am.list(basePath);
			imageUri = new Bitmap[files.length];
			basePath += "/";
			for(int i = 0; i < files.length; i++) {
				imageUri[i] = BitmapFactory.decodeStream(am.open(basePath + files[i]));
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }

    
    private class ImageAdapter extends BaseAdapter {

    	private Context mContext;
    	
    	
    	public ImageAdapter(Context context) {
    		mContext = context;
    	}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return imageUri.length;
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return imageUri[arg0];
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder vh = null;
			
			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.item, null);
				
				vh = new ViewHolder();
				vh.imgV = (ImageView) convertView.findViewById(R.id.imageV);
				vh.imgV.setScaleType(ImageView.ScaleType.FIT_XY);
				convertView.setTag(vh);
			} else {
				vh = (ViewHolder) convertView.getTag();
			}
			
			//set image resource
			vh.imgV.setImageBitmap(imageUri[position]);
			return convertView;
		}
		
		/**
		 * holder for caching UI component
		 * @author hp
		 *
		 */
		class ViewHolder {
			public ImageView imgV;
		}
    	
    }

	@Override
	public void onItemSelected(AdapterView<?> arg0, View arg1, int position,
			long arg3) {
		//recyle old bitmap
		BitmapDrawable drawable = (BitmapDrawable) largeView.getDrawable();
		if (drawable != null && !drawable.getBitmap().isRecycled()) {
			drawable.getBitmap().recycle();
		}
		largeView.setImageBitmap(imageUri[position]);
		largeView.startAnimation(mAnimation);
	}

	@Override
	public void onNothingSelected(AdapterView<?> arg0) {
		
		
	}
}

中间大图片的显示加上动画,
动画文件如下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <alpha android:fromAlpha="0.1"
      android:toAlpha="1.0"
      android:duration="1500"/>
</set>
放在res/anim下。
实际效果请运行附件。
至此可完成。
分享到:
评论

相关推荐

    Android 自定义ListView + Gallery 组合

    本文将详细讲解如何在Android应用中实现自定义的ListView与Gallery组合,以及这两个组件的核心特性和使用技巧。 首先,ListView是Android中用于显示长列表的视图,它可以动态加载数据,避免一次性加载大量内容导致...

    Android下Gallery控件的使用

    1. 添加依赖:在XML布局文件中添加`Gallery`控件,通常设置`android:id`、`android:layout_width`和`android:layout_height`属性。 ```xml &lt;Gallery android:id="@+id/gallery" android:layout_width="match_...

    android gallery 放大效果

    在Android开发中,`Gallery`组件是一个非常有用的控件,它允许用户在水平轴上滑动浏览多个项目,常用于实现图片浏览或者选项选择。在本主题中,我们将深入探讨如何利用`Gallery`来实现图片滑动,并且在选中图片时...

    android--Gallery 的基本使用

    在Android开发中,`Gallery`组件是一个非常有用的视图,它允许用户通过左右滑动来浏览一系列的项目,常用于图片或选项的选择。本篇文章将深入解析`Gallery`组件的基本使用,以及与其相关的`ImageSwitcher`组件。 ...

    Android应用源码之Gallery2_Android.zip

    Android的Animation和Transition框架提供了丰富的动画选项,包括平移、旋转、淡入淡出等。你可以从源码中学习如何创建这些动画,并在适当的地方应用它们。 总的来说,通过分析Gallery2的源码,开发者可以提升在以下...

    Android Gallery

    在提供的博客链接中(http://blog.csdn.net/csdnyuandaimaxuexi/article/details/48809349),作者详细介绍了如何在实际项目中使用和自定义Gallery控件,包括图片加载、点击事件处理和滚动效果的调整。通过阅读这篇...

    android gallery简单应用

    尽管如此,理解`Gallery`的使用仍然对了解Android UI发展史和兼容旧项目有所帮助。 `Gallery`控件是`AbsSpinner`的一个子类,它继承了`AdapterView`的特性,可以绑定数据源并显示来自适配器的数据。`Gallery`的基本...

    android 4.0 Gallery源码

    Gallery的界面设计简洁且交互流畅,利用Animation类和Transition API实现过渡动画,增强了用户体验。例如,切换图片时的淡入淡出效果,都是通过自定义动画实现的。 7. **性能优化** 为了提高应用性能,Gallery...

    Android Gallery小例子

    这个小例子展示了如何在Android应用中集成和使用`Gallery`控件,以实现一个可滚动的图片画廊功能。下面我们将深入探讨`Gallery`的相关知识点。 1. **Gallery控件介绍** `Gallery`是Android SDK中的一个...

    Android Gallery 3D效果

    2. **视图动画**:在Android中,可以使用`Animation`类或者`ObjectAnimator`来创建动画效果。对于3D旋转,可以使用` Rotate3dAnimation`或`ObjectAnimator.ofFloat()`方法,指定沿着X轴或Y轴的旋转。动画的持续时间...

    Android Gallery自定义ImageView和Gallery实现图片浏览功能

    Android Gallery 自定义ImageView和Gallery实现图片浏览功能,类似Android图库软件,主要实现的功能有:图片左右滑动、放大缩小、放大弹回、缩小弹回。 一开始使用Viewpager实现图片浏览,发现两张图片滑动时没有...

    一个关于android Gallery图片点击后放大缩小的例子

    通过分析和学习这个项目,你可以更好地理解和实践在旧版Android系统中如何利用`Gallery`实现图片点击后渐进式放大缩小的效果。不过,对于新项目,建议使用现代的组件和方法来替换`Gallery`,以获得更好的性能和用户...

    Android Gallery 左对齐,点击禁止滑动 demo

    "Android Gallery 左对齐,点击禁止滑动 demo"是一个关于如何自定义`Gallery`行为的实例,通过这个示例,开发者可以学习到如何控制`Gallery`的对齐方式和手势响应,同时也能了解到为何在新项目中应优先考虑使用更...

    android gallery 3D效果

    然而,随着Android版本的更新,`Gallery`组件在API 16(Android 4.1, Jelly Bean)之后被弃用,取而代之的是`RecyclerView`和`PagerAdapter`等更强大、更灵活的视图管理工具。尽管如此,我们仍可以通过一些技巧来...

    android 带有 动画 效果 的 Gallery 控件

    然而,原生的`Gallery`控件在Android API 17之后就被废弃了,但通过一些技巧和自定义实现,我们仍然可以在较新的API版本上实现类似的功能。本文将深入探讨如何创建一个带有动画效果的`Gallery`控件,并提供相关的...

    android gallery demo

    从提供的文件名来看,我们可以看到一些关于`Gallery`的源码解析和探究文章,如"使用Android自带Gallery组件实现CoverFlow",这可能涉及到将`Gallery`组件改造为更复杂的CoverFlow效果,类似于iPod的封面翻转。...

    android Gallery + ImageSwitcher

    在Android开发中,`Gallery` 和 `ImageSwitcher` 是两个用于展示图像集合和实现图像切换效果的重要组件。它们各自具有独特的优势,结合使用时,可以创建出功能丰富、视觉效果良好的图像浏览界面。 #### Gallery ...

    Android 重写Gallery

    在Android开发中,`Gallery`组件是Android早期版本(API level 16及以下)提供的一种可以水平滑动浏览图片或项目的控件。它允许用户通过手指滑动来浏览一串连续的视图,通常用于展示照片或者进行选择操作。然而,...

    Android Gallery轮播图

    首先,`Gallery`是Android SDK中内置的一个视图类,它允许用户水平滚动一组项目,类似于一个水平方向的ListView。然而,原生的Gallery组件并不完全满足所有需求,因此需要对其进行自定义。 1. **自定义布局**: 要...

Global site tag (gtag.js) - Google Analytics