- 浏览: 361480 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
nglxl:
点赞啊,必须点赞!!深度好文,解决了困扰我多年的疑惑。
tcp 长连接与短连接 -
cofftech:
opengl源码http://www.eyesourcecod ...
OPenGL ES 关键API小结 -
mail_j:
不是很好用,很多情况都不能处理 1、没有区分关键字的大小写2、 ...
Java解析sql语句,分析出调用到的所有表 -
a455642158:
就算监听到变成了cmwap还不行,还得监听网络连接状态Stat ...
android APN切换cmwap实现 -
xuhl1022:
看了您的android 4篇 浏览器二次开发,感触颇深,写的很 ...
Android浏览器Browser二次开发(四)浏览器中的APN切换
今天主要探究Gallery和Animation的使用。 制作一个美女图片集锦。
1. 首先需要做一个列表, 用来显示类别:
...
需要自定义个一个TitleAdapter集成BaseAdapter,
使用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>
类代码如下:
中间大图片的显示加上动画,
动画文件如下
<?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. 首先需要做一个列表, 用来显示类别:
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下。
实际效果请运行附件。
至此可完成。
- BG2.zip (9 MB)
- 下载次数: 238
- BeautifulGirl.rar (8.1 MB)
- 下载次数: 236
发表评论
-
基于Java NIO的手机答题游戏开发
2014-03-31 17:59 1785先上个游戏截图: 豌豆荚地址: http://apps.w ... -
enable android deviceconnection under linux
2013-04-24 15:45 1004开发环境搭建完毕,Eclipse,Java,ADT都已经折腾 ... -
set CCache for building android source code
2013-04-24 15:14 1191Setting up ccache You can opti ... -
android 源码下载403 forbidden, 406 not acceptable 错误
2013-04-24 08:46 2453解决方法 1. 浏览器登录https://android.g ... -
ubuntu11.10 编译android4.0 错处
2013-04-08 21:45 1226今天使用ubuntu11.10编译android4.0出现以下 ... -
常用WebService列表
2013-01-31 23:22 2638快递查询接口 http://webservice.36wu.c ... -
startActivityForResult 无响应问题
2013-01-24 13:57 3853今天开发遇到了个问题, 就是从一个Activity中使用sta ... -
Android中仿新浪微博刷新列表
2012-11-22 17:35 7344大家看到新浪微博中的列表往下拉的时候, 头部出现正在刷新,然后 ... -
Grid调整间距
2012-09-29 08:52 1747今天使用GridView, 发现点中某一Item时选中部分的背 ... -
Android执行 shell command
2012-03-24 17:00 7255Android执行shell命令 一、方法 1. /* ... -
BBBBBB111
2012-03-23 11:42 10陈波: 本周:代码review,解决findbugs中bug以 ... -
MonkeyTestError
2012-03-21 10:15 903-20 21:36:42.439 W/dalvikvm( ... -
INSTALL_FAILED_OLDER_SDK ERROR
2012-03-12 15:52 4470Install APK with adb: $ platfo ... -
4.0源码编译问题
2012-03-07 17:12 31581、fatal error: GL/glx.h: No suc ... -
4.0 编译apk中无classes.dex
2012-03-07 17:11 3962下载完android 4.0代码,模拟器里面的gallery不 ... -
Android 4.0源码编译错误
2012-03-05 10:19 2582UNEXPECTED TOP-LEVEL EXCEPTION: ... -
AndroidLockScreenDemo
2012-02-18 15:54 993锁屏解锁的成功案例。 -
G14 root权限获取
2012-02-13 23:36 2869HTC G14 ROOT权限获取后就能删除系统自带的程序,相信 ... -
锁屏d ds
2011-12-15 00:49 903private final IDevicePolicyMana ... -
HuHug
2011-11-14 00:30 957gfjijgsdklgkg
相关推荐
本文将详细讲解如何在Android应用中实现自定义的ListView与Gallery组合,以及这两个组件的核心特性和使用技巧。 首先,ListView是Android中用于显示长列表的视图,它可以动态加载数据,避免一次性加载大量内容导致...
1. 添加依赖:在XML布局文件中添加`Gallery`控件,通常设置`android:id`、`android:layout_width`和`android:layout_height`属性。 ```xml <Gallery android:id="@+id/gallery" android:layout_width="match_...
在Android开发中,`Gallery`组件是一个非常有用的控件,它允许用户在水平轴上滑动浏览多个项目,常用于实现图片浏览或者选项选择。在本主题中,我们将深入探讨如何利用`Gallery`来实现图片滑动,并且在选中图片时...
在Android开发中,`Gallery`组件是一个非常有用的视图,它允许用户通过左右滑动来浏览一系列的项目,常用于图片或选项的选择。本篇文章将深入解析`Gallery`组件的基本使用,以及与其相关的`ImageSwitcher`组件。 ...
在提供的博客链接中(http://blog.csdn.net/csdnyuandaimaxuexi/article/details/48809349),作者详细介绍了如何在实际项目中使用和自定义Gallery控件,包括图片加载、点击事件处理和滚动效果的调整。通过阅读这篇...
Android的Animation和Transition框架提供了丰富的动画选项,包括平移、旋转、淡入淡出等。你可以从源码中学习如何创建这些动画,并在适当的地方应用它们。 总的来说,通过分析Gallery2的源码,开发者可以提升在以下...
尽管如此,理解`Gallery`的使用仍然对了解Android UI发展史和兼容旧项目有所帮助。 `Gallery`控件是`AbsSpinner`的一个子类,它继承了`AdapterView`的特性,可以绑定数据源并显示来自适配器的数据。`Gallery`的基本...
Gallery的界面设计简洁且交互流畅,利用Animation类和Transition API实现过渡动画,增强了用户体验。例如,切换图片时的淡入淡出效果,都是通过自定义动画实现的。 7. **性能优化** 为了提高应用性能,Gallery...
这个小例子展示了如何在Android应用中集成和使用`Gallery`控件,以实现一个可滚动的图片画廊功能。下面我们将深入探讨`Gallery`的相关知识点。 1. **Gallery控件介绍** `Gallery`是Android SDK中的一个...
2. **视图动画**:在Android中,可以使用`Animation`类或者`ObjectAnimator`来创建动画效果。对于3D旋转,可以使用` Rotate3dAnimation`或`ObjectAnimator.ofFloat()`方法,指定沿着X轴或Y轴的旋转。动画的持续时间...
Android Gallery 自定义ImageView和Gallery实现图片浏览功能,类似Android图库软件,主要实现的功能有:图片左右滑动、放大缩小、放大弹回、缩小弹回。 一开始使用Viewpager实现图片浏览,发现两张图片滑动时没有...
通过分析和学习这个项目,你可以更好地理解和实践在旧版Android系统中如何利用`Gallery`实现图片点击后渐进式放大缩小的效果。不过,对于新项目,建议使用现代的组件和方法来替换`Gallery`,以获得更好的性能和用户...
"Android Gallery 左对齐,点击禁止滑动 demo"是一个关于如何自定义`Gallery`行为的实例,通过这个示例,开发者可以学习到如何控制`Gallery`的对齐方式和手势响应,同时也能了解到为何在新项目中应优先考虑使用更...
Gallery3D是Android平台上的一款3D图片浏览应用,它展示了Android系统中3D图形处理和图像展示的强大能力。这个应用的源码提供了深入理解Android图形库、线程管理、数据加载优化以及用户交互设计的宝贵机会。以下是对...
然而,随着Android版本的更新,`Gallery`组件在API 16(Android 4.1, Jelly Bean)之后被弃用,取而代之的是`RecyclerView`和`PagerAdapter`等更强大、更灵活的视图管理工具。尽管如此,我们仍可以通过一些技巧来...
然而,原生的`Gallery`控件在Android API 17之后就被废弃了,但通过一些技巧和自定义实现,我们仍然可以在较新的API版本上实现类似的功能。本文将深入探讨如何创建一个带有动画效果的`Gallery`控件,并提供相关的...
从提供的文件名来看,我们可以看到一些关于`Gallery`的源码解析和探究文章,如"使用Android自带Gallery组件实现CoverFlow",这可能涉及到将`Gallery`组件改造为更复杂的CoverFlow效果,类似于iPod的封面翻转。...
在Android开发中,`Gallery` 和 `ImageSwitcher` 是两个用于展示图像集合和实现图像切换效果的重要组件。它们各自具有独特的优势,结合使用时,可以创建出功能丰富、视觉效果良好的图像浏览界面。 #### Gallery ...
在Android开发中,`Gallery`组件是Android早期版本(API level 16及以下)提供的一种可以水平滑动浏览图片或项目的控件。它允许用户通过手指滑动来浏览一串连续的视图,通常用于展示照片或者进行选择操作。然而,...