Android 控件之Gallery和ImageSwitcher图片切换器
16lz
2021-01-23
ImageSwitcher是Android中控制图片展示效果的一个控件,如:幻灯片效果...,颇有感觉啊。做相册一绝
一、重要方法
setImageURI(Uriuri):设置图片地址
setImageResource(int resid):设置图片资源库
setImageDrawable(Drawabledrawable):绘制图片
二、实例
设置动画效果
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
三、完整代码
1、布局文件imageswitch.xml(显示弹出的对话框内容的布局。一个Gallery和一个ImageSwitcher,一上一下)
<?xml version="1.0" encoding="utf-8"?><RelativeLayout android:id="@+id/widget34"android:layout_width="fill_parent" android:layout_height="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"><Gallery android:id="@+id/img_gallery" android:layout_width="fill_parent"android:layout_height="110px" android:layout_marginTop="10px"android:layout_alignParentLeft="true"/><ImageSwitcher android:id="@+id/imageswitch"android:layout_width="90px" android:layout_height="90px"android:layout_alignParentTop="true" android:layout_centerHorizontal="true"android:layout_alignBottom="@+id/gallery"/></RelativeLayout>2、完整类AddUserActivity.java,当点击对应的按钮的时候,就弹出圣诞框。
public class AddUserActivity extends Activity {/** Called when the activity is first created. */ImageButton imButton;ImageSwitcher imageSwitcher;Gallery gallery;int imagePosition;/** * 所有的图像图片 */private int[] images = new int[]{R.drawable.icon,R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image8,R.drawable.image9,R.drawable.image10,R.drawable.image11,R.drawable.image12,R.drawable.image13,R.drawable.image14,R.drawable.image15,R.drawable.image16,R.drawable.image17,R.drawable.image18,R.drawable.image19,R.drawable.image20,R.drawable.image21,R.drawable.image22,R.drawable.image23,R.drawable.image24,R.drawable.image25,R.drawable.image26,R.drawable.image27,R.drawable.image28,R.drawable.image29,R.drawable.image30};AlertDialog imageChooseDialog;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.add_new);imButton = (ImageButton) findViewById(R.id.image_button);imButton.setOnClickListener(new ImageButtonListener());}class ImageButtonListener implements OnClickListener{final CharSequence[] items = { "Red", "Green", "Blue" };@Overridepublic void onClick(View v) {initImageChooseDialog();imageChooseDialog.show();}}//初始化对话框;private void initImageChooseDialog() {AlertDialog.Builder builder = new Builder(this);builder.setTitle("请选择图片").setPositiveButton("确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {imButton.setImageResource(images[imagePosition]);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}});LayoutInflater inflater = LayoutInflater.from(this);View view = inflater.inflate(R.layout.imageswitch, null);gallery = (Gallery)view.findViewById(R.id.img_gallery);gallery.setAdapter(new ImageAdapter(this));//设置gallery数据。gallery.setSelection(images.length/2);imageSwitcher = (ImageSwitcher)view.findViewById(R.id.imageswitch);imageSwitcher.setFactory(new ImageViewFactory(this));gallery.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubimagePosition=position;imageSwitcher.setImageResource(images[position]);}@Overridepublic void onNothingSelected(AdapterView<?> parent) {// TODO Auto-generated method stub}});builder.setView(view);imageChooseDialog=builder.create();}/** * 这个Adapter类表示Data、Adapter、View,Adapter表示 Data和View之间的纽带 * 每显示一列数据都会运行这个类. */class ImageAdapter extends BaseAdapter{private Context context;public ImageAdapter(Context context) {this.context = context;}/** * 显示的数据列数。这里是可供选择的图片数量。表示画的次数,在创建类时首先运行。 */@Overridepublic int getCount() {// TODO Auto-generated method stubSystem.out.println("BaseAdapter-----getCount:"+images.length);return images.length;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubSystem.out.println("BaseAdapter-----getItem:"+position);return null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubSystem.out.println("BaseAdapter-----getItemId:"+position);return 0;}/** * 返回自己定义试图;也可以在xml文件里进行定义,(这里定义 的是gallery里的数据的格式 。) * 这里position表示当前选择列的位置。 * 每显示一列数据都会执行一次 */@Overridepublic View getView(int position, View convertView, ViewGroup parent) {System.out.println("BaseAdapter-----position:"+position);ImageView iv = new ImageView(context);iv.setImageResource(images[position%images.length]);iv.setAdjustViewBounds(true);iv.setLayoutParams(new Gallery.LayoutParams(80,80));iv.setPadding(15, 10, 15, 10);return iv;}}class ImageViewFactory implements ViewFactory{Context context;public ImageViewFactory(Context context) {this.context = context;}@Overridepublic View makeView() {ImageView iv = new ImageView(context);//设置显示的大小 。布局参数。iv.setLayoutParams(new ImageSwitcher.LayoutParams(90, 90));return iv;}}}当第一次运行,选择图片之后的时候,在日志输出:
08-18 11:44:57.522: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.522: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.522: INFO/System.out(400): BaseAdapter-----getItemId:008-18 11:44:57.522: INFO/System.out(400): BaseAdapter-----getItemId:008-18 11:44:57.522: INFO/System.out(400): BaseAdapter-----getItemId:1508-18 11:44:57.572: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.572: INFO/System.out(400): BaseAdapter-----position:1508-18 11:44:57.583: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.583: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.583: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.613: INFO/System.out(400): BaseAdapter-----getItemId:1508-18 11:44:57.613: INFO/System.out(400): BaseAdapter-----position:1608-18 11:44:57.622: INFO/System.out(400): BaseAdapter-----position:1708-18 11:44:57.635: INFO/System.out(400): BaseAdapter-----position:1808-18 11:44:57.635: INFO/System.out(400): BaseAdapter-----position:1408-18 11:44:57.643: INFO/System.out(400): BaseAdapter-----position:1308-18 11:44:57.643: INFO/System.out(400): BaseAdapter-----position:1208-18 11:44:57.662: INFO/System.out(400): BaseAdapter-----getItemId:1508-18 11:44:57.662: INFO/System.out(400): BaseAdapter-----getItemId:1508-18 11:44:57.673: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.673: INFO/System.out(400): BaseAdapter-----position:1508-18 11:44:57.682: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.682: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.693: INFO/System.out(400): BaseAdapter-----getCount:3108-18 11:44:57.693: INFO/System.out(400): BaseAdapter-----getItemId:1508-18 11:44:57.693: INFO/System.out(400): BaseAdapter-----getItemId:15
运行结果如图:
更多相关文章
- Android的数据存储(二)——SQLite数据库
- android数据储存之应用安装位置
- Android — Room 数据库跳跃式升级(Migration)
- android中使用Thumbnails批量加载sdcard中的缩略图片
- Android 拼接两个图片
- android 视频、图片混合轮播控件zbanner
- Android计算图片占用内存