Android控件系列之相册Gallery&Adapter适配器入门&控件缩放动画入门

文章概述:

本篇文章介绍了Android中的两个常用控件——相册Gallery和适配器Adapter,并将介绍使用Gallery时实现图片控件缩放动画的方法。其中,将会针对这些控件的使用方法、属性以及实现原理进行详细解析,并提供两个实例按照步骤讲解。

一、Gallery控件

Gallery是Android原生控件中最早的一个图片浏览控件,但在2011年作为过时组件被Android官方所废弃。即使废弃,但大部分Android开发者仍然使用,因为Gallery在实现上非常简单、易于上手。使用Gallery实现图片浏览也非常直观,用户只需滑动可以水平或垂直的图片列即可进行图片预览。

Gallery的使用方法:

  1. 在XML布局文件中定制Gallery控件,eg:
<Gallery  
    android:id="@+id/gallery"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content">  
</Gallery>  
  1. 定义Gallery控件所需要的Adapter适配器,eg:
public class ImageAdapter extends BaseAdapter {  
    private Context mContext;  

    public ImageAdapter(Context c) {  
        mContext = c;  
    }  

    public int getCount() {  
        return mThumbIds.length;  
    }  

    public Object getItem(int position) {  
        return null;  
    }  

    public long getItemId(int position) {  
        return 0;  
    }  

    //创建Gallery需要的这个控件的ImageView  
    public View getView(int position, View convertView, ViewGroup parent) {  
        ImageView imageView = new ImageView(mContext);  
        imageView.setImageResource(mThumbIds[position]);  
        imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));  
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);  
        return imageView;  
    }  
   // references to our images  
    private Integer[] mThumbIds = {  
            R.drawable.sample_1,  
            R.drawable.sample_2,  
            R.drawable.sample_3,  
            R.drawable.sample_4,  
            R.drawable.sample_5,  
            R.drawable.sample_6,  
            R.drawable.sample_7  
    };  
} 
  1. 在Activity中完成Gallery和Adapter的关联,eg:
public class AndroidGallery extends Activity {  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  

        Gallery gallery = (Gallery) findViewById(R.id.gallery);  
        gallery.setAdapter(new ImageAdapter(this));  
    }  
}  

以上就是使用Gallery控件的基本解释,但在实际开发中,由于Google不推荐使用Gallery,建议使用RecyclerView等替代方案,以达到更流畅的用户体验。

二、适配器Adapter

Adapter是常用的Android控件,它承载着数据,将数据连接到用户的View。在Android中,我们常用的Adapter有ListView、GridView、Spinner等,它们都是继承自BaseAdapter。Adapter的主要作用是为ListView等提供数据集,同时实现一定的视图缓存和按需绘制显示。而且在用于那些需要动态加载或者变换的项目时,使用Adapter不仅方便,还避免了因为数据更新而对整个界面重新渲染的问题。

适配器Adapter的使用方法:

  1. 创建Adapter类,实现BaseAdapter类和4个重要的方法,eg:
public class FruitAdapter extends BaseAdapter {  
    private List<Fruit> mFruitList;  
    private Context mContext;  

    public FruitAdapter(Context context, List<Fruit> fruitList){  
        mContext = context;  
        mFruitList = fruitList;  
    }  

    @Override  
    public int getCount() {  
        return mFruitList.size();  
    }  

    @Override  
    public Object getItem(int position) {  
        return mFruitList.get(position);  
    }  

    @Override  
    public long getItemId(int position) {  
        return position;  
    }  

    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        ViewHolder holder;    
        if (convertView == null) {    
            convertView = LayoutInflater.from(mContext).inflate(R.layout.fruit_item, null);    
            holder = new ViewHolder();    
            holder.fruitImage = (ImageView) convertView.findViewById(R.id.fruit_image);    
            holder.fruitName = (TextView) convertView.findViewById(R.id.fruit_name);    
            convertView.setTag(holder);// 将ViewHolder存储在View中    
        } else {    
            holder = (ViewHolder) convertView.getTag();// 重新获取ViewHolder    
        }    
        Fruit fruit = mFruitList.get(position);    
        holder.fruitImage.setImageResource(fruit.getImageId());    
        holder.fruitName.setText(fruit.getName());    
        return convertView;    
    }    
    class ViewHolder {    
        ImageView fruitImage;    
        TextView fruitName;    
    }    
}
  1. 定义数据展示及其容器ListView,eg:
<ListView  
    android:id="@+id/list_view"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content">  
</ListView>  
  1. 完成Adapter和ListView的绑定调用,eg:
public class MainActivity extends AppCompatActivity {  
    private List<Fruit> mFruitList = new ArrayList<>();    

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        initFruits();  
        FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, mFruitList);    
        ListView listView = (ListView) findViewById(R.id.list_view);  
        listView.setAdapter(adapter);  
    }  

    private void initFruits() {    
        for (int i = 0; i < 2; i++) {    
            Fruit apple = new Fruit("Apple", R.drawable.apple_pic);    
            mFruitList.add(apple);    
            Fruit banana = new Fruit("Banana", R.drawable.banana_pic);    
            mFruitList.add(banana);    
            Fruit orange = new Fruit("Orange", R.drawable.orange_pic);    
            mFruitList.add(orange);    
            Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);    
            mFruitList.add(watermelon);    
            Fruit pear = new Fruit("Pear", R.drawable.pear_pic);    
            mFruitList.add(pear);    
            Fruit grape = new Fruit("Grape", R.drawable.grape_pic);    
            mFruitList.add(grape);    
            Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);    
            mFruitList.add(pineapple);    
            Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);    
            mFruitList.add(strawberry);    
            Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);    
            mFruitList.add(cherry);    
            Fruit mango = new Fruit("Mango", R.drawable.mango_pic);    
            mFruitList.add(mango);    
        }    
    }    
} 

三、控件缩放动画入门

利用Android中动画资源机制的ImageView属性动画实现的缩放动画,需要用到Android自带的View动画是比较简单的实现方式。大体内容是定义一个一开始是不可见状态,一点击图片则出现放大缩小效果的动画。

  1. 导入一张图片,eg:
<ImageView  
     android:id="@+id/image_big"  
     android:src="@drawable/love1"  
     android:layout_width="match_parent"  
     android:layout_height="240dp"  
     android:scaleType="centerCrop"  
     android:visibility="invisible"/>  
  1. 编写XML文件定义动画,eg:
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <scale  
        android:fromXScale="1.0"  
        android:fromYScale="1.0"  
        android:toXScale="1.2"  
        android:toYScale="1.2"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:duration="200" />  
    <scale  
        android:fromXScale="1.2"  
        android:fromYScale="1.2"  
        android:toXScale="1.0"  
        android:toYScale="1.0"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:startOffset="200"  
        android:duration="200" />  
</set>  
  1. Activity中控制动画的点击事件,eg:
Button btn_simple = (Button)findViewById(R.id.btn_simple);  
     ImageView big_img = (ImageView)findViewById(R.id.image_big);  
     final Animation anim = AnimationUtils.loadAnimation(this,R.anim.big_pic_anim);  
     btn_simple.setOnClickListener(new View.OnClickListener() {  
         @Override  
         public void onClick(View v) {  
             if (big_img.getVisibility() == View.GONE){  
                 big_img.setVisibility(View.VISIBLE);  
                 big_img.startAnimation(anim);  
             }else {  
                 big_img.setVisibility(View.GONE);  
             }  
         }  
     });      

以上,便是实现图片控件缩放动画的基本流程。在实际项目中应用时,还可以根据实际需求,通过不同的动画效果、时长、条件等来实现更多的定制需求。

示例解释:分别使用2个控件——Gallery和适配器Adapter完成了两个库——图片查看效果和数据列表展示效果的实现,通过阅读完整篇幅的讲解可以了解到控件的基础属性,以及布局和适配器的绑定关系及其针对开发中的简单应用和用法,同时,学习到了一种利用Android动画资源机制实现控件缩放的基本实现方式。该攻略的代码示例具体讲解,让读者能够在日后开发中轻松地将这些控制添加到自己的项目中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android控件系列之相册Gallery&Adapter适配器入门&控件缩放动画入门 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Win10 Mobile Build 15254.544正式版累积更新推送: 补丁型号KB4478936

    Win10 Mobile Build 15254.544正式版累积更新推送: 补丁型号KB4478936攻略 简介 Win10 Mobile Build 15254.544正式版累积更新是针对Windows 10 Mobile操作系统的一个重要更新。该更新的补丁型号为KB4478936。本攻略将详细介绍如何安装和应用这个累积更新。 步骤 检查更新可用性:首先…

    other 2023年8月3日
    00
  • 深入解析Android中View创建的全过程

    深入解析Android中View创建的全过程 在Android中,View的创建过程是一个相对复杂的过程,涉及到多个环节和步骤。下面将详细讲解View创建的全过程,并提供两个示例说明。 1. 布局文件解析 View的创建过程通常是从布局文件开始的。Android使用XML文件来描述布局,通过解析布局文件可以获取到View的层次结构和属性信息。 示例1:假设我…

    other 2023年8月21日
    00
  • gcc是什么 gcc编译器怎么用

    GCC是什么 GCC(GNU Compiler Collection)是一套由GNU编写的编程语言编译器,支持C、C++、Objective-C、Fortran、Ada、和其他一些语言。GCC是自由软件,可在许多操作系统上使用,包括Linux、UNIX、MacOS和Windows。 GCC编译器怎么用 GCC是命令行工具,可以通过终端或命令提示符编译代码。以…

    other 2023年6月26日
    00
  • js算法实例之字母大小写转换

    JS算法实例之字母大小写转换攻略 本攻略将详细讲解如何使用JavaScript编写一个字母大小写转换的算法。我们将使用两个示例说明来帮助理解。 示例一:将字符串中的大写字母转换为小写字母 function convertToLowercase(str) { let result = \"\"; for (let i = 0; i <…

    other 2023年8月16日
    00
  • 硬件钱包Ledger Nano S介绍及安装使用教程

    硬件钱包Ledger Nano S介绍及安装使用教程 什么是Ledger Nano S Ledger Nano S是一款由法国公司Ledger开发的硬件钱包,可用于安全地存储加密货币私钥,并通过USB连接到计算机或移动设备进行交易。它支持多种加密货币,包括比特币、以太坊和莱特币等。 安装Ledger Nano S 第一步:购买Ledger Nano S Le…

    other 2023年6月20日
    00
  • 显卡驱动引起的重启故障

    下面介绍一下“显卡驱动引起的重启故障”的解决攻略。 问题的描述 如果你在使用电脑时,电脑突然自动重启并且频繁出现这个问题,你很有可能是因为显卡驱动引起的重启故障,这种故障可以出现在任何一款电脑上,特别是显卡驱动程序因某些原因不可用,无法顺畅地运行造成的。 解决方案 解决显卡驱动引起的重启故障,需要采取以下措施: 步骤一:卸载显卡驱动程序 考虑到驱动可能已经发…

    other 2023年6月27日
    00
  • Java集合TreeSet用法详解

    Java集合TreeSet用法详解 1. 什么是TreeSet TreeSet是Java集合框架中的一种实现,它是一个有序的、支持基本操作(添加、删除、查找)的集合。使用TreeSet可以方便地实现对元素的排序,并且支持非重复元素的存储。 在TreeSet中,元素按照自然顺序或者指定的比较器顺序进行排序,其中自然顺序指元素实现Comparable接口,并且根…

    other 2023年6月26日
    00
  • vuestyle字体加粗

    当您在Vue项目中使用vuestyle时,可以使用CSS样式来设置字体加粗。以下是详细的步骤和两个示例: 1 使用CSS样式设置字体加粗 在Vue项目中,您可以使用CSS样式设置体加粗。您可以在组件的style标签中添加CSS样式,或者在全局样式表中添加CSS样式。 以下是CSS样设置字体加粗的步骤: 1.1 在组件的style标签中添加CSS样式 在组件的…

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部