Android--ImageSwitcher案例分析详解
强烈推荐:
仿QQ--tab切换动画实例
http://www.eoeandroid.com/thread-173365-1-1.html
仿iphone 气泡短信 DEMO
http://www.eoeandroid.com/thread-112801-1-1.html
一个Gallery 3D效果实例
http://www.eoeandroid.com/thread-182336-1-1.html
ImageSwitcher图像切换器,可以切换器图像。ImageSwitcher类的继承图如下:
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ViewAnimator
android.widget.ViewSwitcher
android.widget.ImageSwitcher
android.widget.ImageSwitcher 继承了android.widget.FrameLayout框架布局类。为了便于学习,我们把官方的ImageSwitcher例子 (ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java)做了一些修改,例 子运行如图7-6屏幕,点击屏幕下面的缩图,实现图片的切换。
图7-6 ImageSwitcher
请参考代码清单7-4,完整代码请参考chapter7_1工程中MyImageSwitcher代码部分。
【代码清单7-4】
public class MyImageSwitcher extends Activity { private ImageSwitcher mSwitcher; private Integer[] mThumbIds = { R.drawable.photo1_thumb, R.drawable.photo2_thumb, R.drawable.photo3_thumb, R.drawable.photo4_thumb, R.drawable.photo5_thumb, R.drawable.photo6_thumb }; private Integer[] mImageIds = { R.drawable.photo1, R.drawable.photo2, R.drawable.photo3, R.drawable.photo4, R.drawable.photo5, R.drawable.photo6 }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.image_switcher); mSwitcher = (ImageSwitcher) findViewById(R.id.switcher); mSwitcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { ImageView i = new ImageView(MyImageSwitcher.this); i.setBackgroundColor(0xFF000000); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); return i; } }); Gallery g = (Gallery) findViewById(R.id.gallery); g.setAdapter(new ImageAdapter(this)); g.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View v, int position, long id) { mSwitcher.setImageResource(mImageIds[position]); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); … … } … … }
在ImageSwitcher图像切换器中需要提供缩图数组集合mThumbIds和正常图片集合mImageIds.requestWindowFeature(Window.FEATURE_NO_TITLE)方法是设置没有标题的屏幕。
实 现图像切换关键代码是mSwitcher.setFactory(new ViewSwitcher.ViewFactory() {…}),需要提供一个ViewSwitcher。ViewFactory接口为图像切换的时候创建一个View对象,由于是图像切换器,这个View是 一个ImageView类的实例,i.setBackgroundColor(0xFF000000)指定背景颜 色,i.setScaleType(ImageView.ScaleType.FIT_CENTER)指定排列方式为居中。下面的代码就是设置图片的布局 与父容器匹配模式:
i.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
在 屏幕下面的缩图是Gallery类型,点击缩图触发事件AdapterView.OnItemSelectedListener()时改变图片切换器的图 片源mSwitcher.setImageResource(mImageIds[position]),从而实现图片的切换。
缩图的Gallery还必须实现一个BaseAdapter适配器,代码请参考代码清单7-5,完整代码请参考chapter7_1工程中MyImageSwitcher代码部分。
【代码清单7-5】
public class ImageAdapter extends BaseAdapter { public ImageAdapter(Context c) { mContext = c; } public int getCount() { return mThumbIds.length; } public Object getItem(int position) { return mThumbIds[position]; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(mContext); i.setImageResource(mThumbIds[position]); i.setAdjustViewBounds(true); i.setLayoutParams(new Gallery.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); i.setBackgroundResource(R.drawable.picture_frame); return i; } private Context mContext; }
getView() 方法中返回缩图的对象,i.setImageResource(mThumbIds[position])是设置图片 源,i.setAdjustViewBounds(true)设置图片对象边框自动调节,i.setLayoutParams()设置图片控件的布 局,i.setBackgroundResource设置背景图片。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架