今天主要探究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;    }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn title.length;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn title[arg0];}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic 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' titleif (position == title.length -1) {vh.titleView.setTextColor(CategoryActivity.this.getResources().getColor(R.color.red));}convertView.setTag(vh);} else {vh = (ViewHolder) convertView.getTag();}//set image resourcevh.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 blocke.printStackTrace();}    }        private class ImageAdapter extends BaseAdapter {    private Context mContext;            public ImageAdapter(Context context) {    mContext = context;    }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn imageUri.length;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn imageUri[arg0];}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic 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 resourcevh.imgV.setImageBitmap(imageUri[position]);return convertView;}/** * holder for caching UI component * @author hp * */class ViewHolder {public ImageView imgV;}        }@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int position,long arg3) {//recyle old bitmapBitmapDrawable drawable = (BitmapDrawable) largeView.getDrawable();if (drawable != null && !drawable.getBitmap().isRecycled()) {drawable.getBitmap().recycle();}largeView.setImageBitmap(imageUri[position]);largeView.startAnimation(mAnimation);}@Overridepublic 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下。
实际效果请运行附件。
至此可完成。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android隐藏标题栏、状态栏、导航栏及全屏方法总结
  6. Android下得到APK包含信息
  7. Android设备不root,从App目录下拷贝文件
  8. 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveI
  9. android 将图片内容解析成字节数组,将字节数组转换为ImageView可

随机推荐

  1. What Android(安卓)Chipset Can Support
  2. Android(安卓)获取CPU架构(指令集)
  3. Android(安卓)使用广播(BroadcastReceiver
  4. Android(安卓)创建与解析XML(五)—— Dom4j
  5. Android(安卓)自定义seekbar
  6. Android(安卓)代码中实现返回键功能
  7. Android中ContextMenu的使用
  8. android 对话框总结
  9. Android(安卓)中三种使用线程的方法
  10. Android(安卓)监听网络变化