animation 实现果冻突出效果

来源:互联网 发布:西安少儿编程培训班 编辑:程序博客网 时间:2024/04/16 13:13

第一个放大动作


<?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.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>


package com.panodic.settings;


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
        
    }
}