文章概述:
本篇文章介绍了Android中的两个常用控件——相册Gallery和适配器Adapter,并将介绍使用Gallery时实现图片控件缩放动画的方法。其中,将会针对这些控件的使用方法、属性以及实现原理进行详细解析,并提供两个实例按照步骤讲解。
一、Gallery控件
Gallery是Android原生控件中最早的一个图片浏览控件,但在2011年作为过时组件被Android官方所废弃。即使废弃,但大部分Android开发者仍然使用,因为Gallery在实现上非常简单、易于上手。使用Gallery实现图片浏览也非常直观,用户只需滑动可以水平或垂直的图片列即可进行图片预览。
Gallery的使用方法:
- 在XML布局文件中定制Gallery控件,eg:
<Gallery
android:id="@+id/gallery"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</Gallery>
- 定义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
};
}
- 在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的使用方法:
- 创建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;
}
}
- 定义数据展示及其容器ListView,eg:
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
- 完成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动画是比较简单的实现方式。大体内容是定义一个一开始是不可见状态,一点击图片则出现放大缩小效果的动画。
- 导入一张图片,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"/>
- 编写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>
- 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技术站