第一个放大动作
<set
xmlns:Android="http://schemas.android.com/apk/res/android"
Android:interpolator="@android:anim/decelerate_interpolator">
<scale
Android:fromXScale="1.0" Android:toXScale="1.3"
Android:fromYScale="1.0" Android:toYScale="1.3"
Android:pivotX="50%" Android:pivotY="50%"
Android:duration="@android:integer/config_mediumAnimTime"/>
</set>
第一个小缩小动作
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:Android="http://schemas.android.com/apk/res/android"
Android:interpolator="@android:anim/decelerate_interpolator">
<scale
Android:fromXScale="1.3" Android:toXScale="1.2"
Android:fromYScale="1.3" Android:toYScale="1.2"
Android:pivotX="50%" Android:pivotY="50%"
Android:duration="@android:integer/config_mediumAnimTime"/>
</set>
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.GridLayout.LayoutParams;
import android.widget.GridView;
import android.widget.ImageView;
import com.panodic.settings.net.ItemListActivity;
import com.panodic.settings.util.LogUtil;
public class Main extends Activity implements OnItemClickListener ,OnItemSelectedListener{
private static final int PADING = 50;
private static final int DELAY_PLAY_ANIMA_TIME = 400;
private GridView mDesk;
private GridView mDesk2;
private int[] mImages = new int[]{
R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a1,
R.drawable.a4,R.drawable.a5,R.drawable.a6,R.drawable.a4};
private int[] mNames = new int[]{R.string.net_setting,R.string.output_mode,R.string.display_position,
R.string.system_upgrade,R.string.phone_control,R.string.about};
private Animation mTurnHuge = null;
private Animation mTurnBig = null;
private int mPreFocusPosition = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadAnimation();
setContentView(R.layout.activity_main);
mDesk = (GridView)findViewById(R.id.desk);
mDesk2 = (GridView)findViewById(R.id.desk2);
mDesk.setAdapter(new ImageAdapter(this));
mDesk2.setAdapter(new ImageAdapter(this));
mDesk.setOnItemClickListener(this);
mDesk2.setOnItemClickListener(this);
mDesk.setOnItemSelectedListener(this);
mDesk2.setOnItemSelectedListener(this);
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
public void run() {
playAnim(0);
}
},DELAY_PLAY_ANIMA_TIME);
}
private class ImageAdapter extends BaseAdapter{
private Context mContext;
public ImageAdapter(Context c){
mContext = c;
}
@Override
public int getCount() {
return mImages.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return mImages[position];
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = null;
i = new ImageView(mContext);
i.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
i.setScaleType(ImageView.ScaleType.CENTER_CROP);
setImagePadding(position,i);
i.setImageResource(mImages[position]);
return i;
}
}
private void setImagePadding(int position,ImageView img){
switch(position){
case 0: img.setPadding(PADING, PADING, 0, 0);break;//在设置边框距离的问题上可以再这里做文章,具体情况根据图片大小设置
case 1: img.setPadding(0, PADING, 0, 0);break;
case 2: img.setPadding(0, PADING, 0, 0);break;
case 3: img.setPadding(0, PADING, PADING, 0);break;
case 4: img.setPadding(PADING, 0, 0, 0);break;
case 5: img.setPadding(0, 0, 0, 0);break;
case 6: img.setPadding(0, 0, 0, 0);break;
case 7: img.setPadding(0, 0, PADING, 0);break;
default: break;
}
}
private void startActivity(Context context,Class cls){
Intent intent = new Intent(this,cls);
startActivity(intent);
}
private void loadAnimation(){
mTurnHuge = AnimationUtils.loadAnimation(this, R.anim.turn_huge);
mTurnBig = AnimationUtils.loadAnimation(this, R.anim.trun_big);
}
private void playAnim(int position ){
mTurnHuge.setFillAfter(false);
mTurnBig.setFillAfter(false);
loadAnimation();
View v = mDesk2.getChildAt(position);
if(mPreFocusPosition!=-1){
View preFocusView = mDesk2.getChildAt(mPreFocusPosition);
preFocusView.setVisibility(View.INVISIBLE);//缩小不要动画了,因为有图层显示上的问题
mPreFocusPosition = position;
}else{
visibleDesk2();
mPreFocusPosition=position;
}
v.setVisibility(View.VISIBLE);
v.startAnimation(mTurnHuge);
v.startAnimation(mTurnBig);
mTurnBig.setFillAfter(true);
}
private void visibleDesk2(){
mDesk2.setVisibility(View.VISIBLE);
int count = mDesk2.getCount();
for(int i=0;i<count;i++){
mDesk2.getChildAt(i).setVisibility(View.INVISIBLE);
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
playAnim(position);
}
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
// TODO Auto-generated method stub
switch(position){
case 0: playAnim(0);startActivity(this,ItemListActivity.class);
break;
case 1: playAnim(1);break;
case 2: playAnim(2);break;
case 3: playAnim(3);break;
case 4: playAnim(4);break;
case 5: playAnim(5);break;
case 6: playAnim(6);break;
case 7: playAnim(7);break;
default: break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
}