想法来自博客http://blog.csdn.net/lmj623565791/article/details/38092093
1,在res下新建animator文件夹,在下新建dkd_itemimg_scale.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together" >
<!-- 每个objectAnimator 控制一个方向
duration----代表变化时间
propertyName----变动方向如scaleX为控制x方向的变化
valueFrom----从多少变
valueTo---变到多少
-->
<objectAnimator
android:duration="500"
android:propertyName="scaleX"
android:valueFrom="0.8"
android:valueTo="1" >
</objectAnimator>
<objectAnimator
android:duration="500"
android:propertyName="scaleY"
android:valueFrom="0.8"
android:valueTo="1" >
</objectAnimator>
</set>
2.将ImageView控件find出来,添加如下代码
Imageview imgview=(Imageview)findViewById(R.id.img)
........
Animator anim = AnimatorInflater.loadAnimator(parent.getContext(), R.animator.dkd_itemimg_scale);
int screenWidth= DeviceUtil.getScreenWidth(parent.getContext());
imgview.setPivotX(screenWidth/2);
imgview.setPivotY(screenWidth/4);
//显示的调用invalidate
imgview.invalidate();
anim.setTarget(imgview);
anim.start();
ok了
如果图片是个在一个listview里,且图片效果只一次,则在adapter里这样
public class DkdListViewAdpter extends BaseAdapter {
/**
* 在listview中要显示的图片
*/
int imgs[] = new int[]{};
/**
* listview中的item已经显示的存于此,达到动画效果只显示一次
*/
private static ArrayList<Integer> visibleItemList = new ArrayList<>();
@Override
public int getCount() {
return imgs.length;
}
@Override
public Object getItem(int position) {
return imgs[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.dkd_listview_item, null);
}
// ImageView imgview = ViewHolderUtils.get(convertView,R.id.img); //参看之前的博客介绍ViewHolderUtilsImageView imgview=(ImageView)convertView.findViewById(R.id.img)
if (imgs.length != 0) {
Drawable drawable = parent.getResources().getDrawable(imgs[position]);
imgview.setImageDrawable(drawable);
}
if (visibleItemList.size() > 0) {
if (!visibleItemList.contains(position)) {
Animator anim = AnimatorInflater.loadAnimator(parent.getContext(), R.animator.dkd_itemimg_scale);
int screenWidth= DeviceUtil.getScreenWidth(parent.getContext());
imgview.setPivotX(screenWidth/2);
imgview.setPivotY(screenWidth/4);
//显示的调用invalidate
imgview.invalidate();
anim.setTarget(imgview);
anim.start();
}
visibleItemList.add(position);//每次都把position放入,下次不显示动画
}
return convertView;
}
public void setData(int imgs[]) {
this.imgs = imgs;
if (visibleItemList.size()>0){
visibleItemList.clear();
}
visibleItemList.add(-1);
notifyDataSetChanged();
}
}
效果图