vectalign-samples變形動畫_源碼分享

咱們知道4.4之後AnimatedVectorDrawable可讓兩個SVG圖像無縫過渡 (稱爲變形動畫),可是這兩個svg圖像的path必須參數個數要相等,同時這些參數的類型要匹配(也就是說格式要對齊),若是不對齊會產生異常。簡單的 path能夠手動修改對齊,可是複雜點的就比較難了。這個工具就是經過命令行的方式將任意兩個svg資源轉換成對齊的模式,而不會改變原始圖像的外觀。html

運行效果:


完整源碼地址:http://www.itlanbao.com/code/20150909/10000/100516.html


package org.bonnyfone.vectalignsamples;

import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import com.wnafee.vector.MorphButton;

public class ActivityMainActivity extends AppCompatActivity {

    private ViewGroup parent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_activity_main);
        parent = (ViewGroup) findViewById(R.id.base_view);

        //Default image
        handleMenu(R.id.action_droid_to_apple);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_activity_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        handleMenu(item.getItemId());
        return true;
    }

    private void handleMenu(int id){
        switch (id){
            case R.id.action_github:
                final String url = "https://github.com/bonnyfone/vectalign";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);
                break;

            case R.id.action_droid_to_apple:
               swapView(createMorphableView(R.drawable.animated_vector_droid_for_apple, R.drawable.animated_vector_apple, Color.parseColor("#4CAF50")));
                break;

            case R.id.action_heart:
               swapView(createMorphableView(R.drawable.animated_vector_twitter, R.drawable.animated_vector_heart, Color.parseColor("#039BE5")));
                break;

            case R.id.action_cart_to_droid:
               swapView(createMorphableView(R.drawable.animated_vector_cart, R.drawable.animated_vector_droid_for_cart, Color.parseColor("#FF5252")));
                break;

            case R.id.action_icons:
               swapView(createMorphableView(R.drawable.animated_vector_icon_a, R.drawable.animated_vector_icon_b, Color.parseColor("#311B92")));
                break;

            case R.id.action_wifi_to_retwwet:
               swapView(createMorphableView(R.drawable.animated_vector_wifi, R.drawable.animated_vector_retweet, Color.parseColor("#607D8B")));
                break;

        }
    }

    private void swapView(View newView){
        View toRemove = parent.findViewById(R.id.morph_id);
        parent.removeView(toRemove);
        newView.setId(R.id.morph_id);
        parent.addView(newView, toRemove.getLayoutParams());
    }

    private View createMorphableView(int startDrawable, int endDrawable, int color){
        MorphButton mb = new MorphButton(this);
        mb.setForegroundTintList(ColorStateList.valueOf(color));
        mb.setForegroundTintMode(PorterDuff.Mode.MULTIPLY);
        mb.setBackgroundColor(Color.TRANSPARENT);
        mb.setStartDrawable(startDrawable);
        mb.setEndDrawable(endDrawable);
        mb.setState(MorphButton.MorphState.START);
        return  mb;
    }

}android

相關文章
相關標籤/搜索