Android开发之ImageSwitcher相册功能实例分析

本文实例讲述了Android开发之ImageSwitcher相册功能。分享给大家供大家参考,具体如下:

简介:

1.ImageSwitcher是viewSwitcher的子类,所以ImageSwitcher继承了ViewSwitcher素有的特性

2.作为ViewSwitcher的子类,它比ViewSwitcher使用更加方便,主要体现在:①. 重写了setNext() ②. 重写了showPrevious()方法。所以其实用起来,要比ViewSwitcher更为方便。

3.中重要的是:ImageSwitcher增加了图片切换动画,使得图片的切换更加自然

这里看下运行效果:

这个例子中,看考了疯狂Android讲义,采用ImageSwicher结合Gridview实现的,一下问布局文件:

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center_horizontal">
    <!--定义一个GridView组件-->
    <GridView
      android:id="@+id/grid01"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:listSelector="@null"
      android:numColumns="3"
      android:horizontalSpacing="2dp"
      android:verticalSpacing="2dp"
      android:gravity="center">
    </GridView>
    <!--定义一个ImageSwitcher组件-->
    <ImageSwitcher
      android:id="@+id/switcher"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_gravity="center_horizontal"
      android:padding="50dp"
      android:inAnimation="@android:anim/fade_in"
      android:outAnimation="@android:anim/fade_out"
      android:background="@color/colorPrimaryDark"
      android:visibility="gone">
    </ImageSwitcher>
</RelativeLayout>

关于GridView 有两种常用的监听事件:

gridView.setOnItemSelectedListenergridView.setOnItemClickListener

关于ImageSwitcher 设置ImageSwitcher 采用了imageSwitcher.setFactory 方法:

public class MainActivity extends Activity {
  int[] imageId = new int[]{
      R.drawable.a0,R.drawable.a1,R.drawable.a2,R.drawable.a4,
      R.drawable.a5,R.drawable.a6,R.drawable.a7,R.drawable.a8,
      R.drawable.a9,R.drawable.a00,R.drawable.a02,R.drawable.a02,
  };
  ImageSwitcher imageSwitcher ;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //创建一个List对象,list对象的元素是Map
    List<Map<String,Object>> listitems = new ArrayList<Map<String, Object>>();
    for (int i = 0 ; i < imageId.length ; i++ ){
      Map<String,Object> listitem = new HashMap<String, Object>();
      listitem.put("image",imageId[i]);
      listitems.add(listitem);
    }
    //获取显示图片的ImageSwitcher
    imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
    //为ImageSwitcher设置动画效果
    imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
      @Override
      public View makeView() {
        //创建ImageView对象
        ImageView imageView = new ImageView(MainActivity.this);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageView.setLayoutParams(new ImageSwitcher.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
        //返回ImageView对象
        return imageView;
      }
    });
    //创建一个SimpleAdapter
    SimpleAdapter simpleAdapter = new SimpleAdapter(this,listitems,R.layout.cell,new String[]{"image"},new int[]{R.id.image1});
    GridView gridView = (GridView) findViewById(R.id.grid01);
    //为gridView设置adapter
    gridView.setAdapter(simpleAdapter);
    //添加列表选中监听事件
    gridView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        imageSwitcher.setVisibility(View.VISIBLE);
        imageSwitcher.setClickable(true);
        //显示当前选中图片
        imageSwitcher.setImageResource(imageId[position]);
      }
      @Override
      public void onNothingSelected(AdapterView<?> parent) {
      }
    });
    //添加列表被单击的监听器
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        imageSwitcher.setVisibility(View.VISIBLE);
        imageSwitcher.setClickable(true);
        //显示被单击图片
        imageSwitcher.setImageResource(imageId[position]);
      }
    });
    //为imageSwitcher添加监听事件
    imageSwitcher.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        imageSwitcher.setVisibility(View.GONE);
        imageSwitcher.setClickable(false);
      }
    });
    imageSwitcher.setClickable(false);
  }
}

几点值得注意的:

  • 由于SimpleAdapter 对象 是根据Map 建立的 ,所以他们的Key一定要相同才行,否则无法生成。
  • 关于闪退现象:我才用的是经过压缩过的图片,如果是加载高清大图很可能出现OOM现象,这是我们需要对图片进行压缩,具体可以参照:https://www.jb51.net/article/158268.htm
  • 这里cell文件还是和往常一样,只是个简单的ImageView罢了,注意设置它的 id 要与活动中调用它的地方相同,这里就不过多描述了。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android开发使用ProgressBar实现进度条功能示例

    本文实例讲述了Android开发使用ProgressBar实现进度条功能.分享给大家供大家参考,具体如下: 进度条ProgressBar的使用主要有两种方向; 1.使用官方默认样式 2.使用自定义样式 先看效果: 详细代码实现文末给出 关于系统自带样式: 在 style="@android:style 中有许多系统自带样式,大家可以更具自身喜好选择. 如果不选择 style 系统会默认使用上图中红色的样式. 关于自定义样式: 这里我们最好看看源码 很容易理解 主要分为三个部分:当前进度.缓冲进度

  • Android开发之自定义星星评分控件RatingBar用法示例

    本文实例讲述了Android开发之自定义星星评分控件RatingBar用法.分享给大家供大家参考,具体如下: 星级评分条RatingBar类似于SeekBar.ProgressBar'等等都可以自定义样式 它的主要用途就比如淘宝.景点 满意度等 这里给出两种自定义效果 如图所示 第一种是通过RatingBar获得分数 第二个是通过RatingBar动态调节控件属性(透明度) 由于RatngBar使用简单 自定义样式方法和 https://www.jb51.net/article/158338.h

  • android和服务器的URLEncodedUtils乱码编码问题的解决方案

    在android开发中我们常常遇到与到乱码问题,遇到乱码问题首先我们要先检查两端编码格式是否一致! 一般我们提交数据用get 和post方法,这两种方法在上传中有con.setRequestProperty("Charset", "UTF-8"); 和httppost.setEntity(new UrlEncodedFormEntity(数据,"UTF-8"));这两中方式来确定编码方式服务器端有request.setCharacterEncod

  • Android开发实现自动切换文字TextSwitcher功能示例

    本文实例讲述了Android开发实现自动切换文字TextSwitcher功能.分享给大家供大家参考,具体如下: 介绍: 1.TextSwitcher是ViewSwicher的一个子类,继承了ViewSwicher的所有方法 2.与ViewSwitcher的另一个子类类似,TextSwitcher也有 3.ImageSwitcher不同的是:TextSwitcher的ViewFactory方法的 makeVieW() 必须放回一个TextXiew组件. 具体效果: 放射思维: 如果将其和轮播图(h

  • Android判断json格式将错误信息提交给服务器

    开发中发现, 服务器偶尔会发送错误格式 json 给 Android 客户端, 导致 Android 客户端 json解析失败, 应用异常. 并非服务器有意坑客户端, 而是客户端请求服务器数据时, 除了得到正确 json 数据外, 数据可能还夹杂其它数据. 例如:  thinkPHP 开启  'SHOW_PAGE_TRACE '=> true 时, 正确的 json 后面会夹杂HTML代码, 解决办法: 1. 将 'SHOW_PAGE_TRACE ' =>false   , 设置为false.

  • Android开发之SeekBar基本使用及各种美观样式示例

    本文实例讲述了Android开发之SeekBar基本使用及各种美观样式.分享给大家供大家参考,具体如下: 改变控件透明度只需通过 .setAlpha()方法实现 有多种改变思路: 1.改变图片透明度 2.改变背景透明度地点 setBackground() 等等 这里举个例子: 思路拓展:只要将透明度的动态修改跟手势向结合 就能实现toolbar等洞见在拖动是隐藏 以下是更SeekBar相结合的实现代码 seekbar的position属性设置在 0~255 之间 正好与0~255 的透明度相对应

  • android关于按钮点击效果实现的方法

    1.切换图片法 通过写XML文件切换图片实现点击效果图中 fabu1,fabu2为两张图片,点击显示fabu2不点击显示fabu1  在按钮的background属性下调用该XML文件 2.通过颜色转换实现 在color文件中定义颜色 然后写XML文件调用 图中base,huise为定义的两种颜色  改变颜色在控件的color属性下调用此XML文件 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下

  • Android开发实现的文本折叠点击展开功能示例

    本文实例讲述了Android开发实现的文本折叠点击展开功能.分享给大家供大家参考,具体如下: 信息栏,景点介绍,购物信息,进场会使用到文本折叠的方法 实现非常简单,这里就不哆嗦了 效果如下: Demo:https://github.com/LonglyWolf/NavigationSystemHLJU 这里用到了三方类库,在app/gradle添加依赖如下: //文本过长 点击展开全部 implementation 'com.ms-square:expandableTextView:0.1.4'

  • Android开发之计算器GridLayout布局实现方法示例

    本文实例讲述了Android开发之计算器GridLayout布局实现方法.分享给大家供大家参考,具体如下: 运行效果: Demo 下载地址:https://github.com/LonglyWolf/Calculator 或者点击此处本站下载. 按钮布局实现: 一个Linearlayout 嵌套三个TextView 最下方的显示当前计算式.上面为先前的计算式. Gridview 网格布局排布按钮 <?xml version="1.0" encoding="utf-8&q

  • Android开发之图片压缩实现方法分析

    本文实例讲述了Android开发之图片压缩实现方法.分享给大家供大家参考,具体如下: 由于Android本身的机制限定 由于系统对每个应用内存分配规则的限制,如果加载过大图片很有可能会导致OOM 即闪退或者卡屏现象 但是手机上拇指大小的图片,超清是完全没有必要的 这是我们就需要对 对片进行压缩处理: 大多数人采用先生成bitmap对象,反复压缩bitmap至100k一下的方法,对图片进行反复压缩,但如果是超级大图,bitmap生成本身就已经会导致OOM,所以我们应先对bitmap进行设置: pu

随机推荐