android自定義Animation動畫實現qq抖一抖效果

jopen 8年前發布 | 15K 次閱讀 Android開發 移動開發

昨天我們介紹了Animation的基本用法。小伙伴們了解的怎么樣了?如果還沒有了解過Animation的小伙伴可以看看這篇博客

android動畫介紹--Animation 實現loading動畫效果

安卓內置的四種動畫雖然說可以用AnimationSet進行組合操作,但是這些組合往往在特定場合是不夠用的,就像view一樣,我們可以自定義動畫效果。

今天要做成的效果是模仿qq的抖一抖效果,老規矩,先來看今天的效果圖:


自定義動畫的實現方法為 繼承Animation類重寫applyTransformation()方法

public class CustomAnimation extends Animation {
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        t.getMatrix().setTranslate((float)Math.sin(interpolatedTime*50)*20,0);

        super.applyTransformation(interpolatedTime, t);
    }
}

可以看到 applyTransformation()方法有兩個參數  第一個參數interpolatedTime代表一個0-1逐漸增大的float, t代表view所需要的變化,例如t.setAlpha();  t.setTranslate();顧名思義這兩個方法是發生透明度變化和位移變化。

那么我們今天的目標是實現抖一抖效果,思路如下: view先向左位移,再向右位移。 坐標為  (0-n,0) --->(0+n,n),一正一負的變化,就要用到我們的三角函數了。所以這里t.setTranslate(Math.sin())。

這樣基本上我們的自定義 動畫就完成了,接下來在MainActivity下獲取當前的布局,給他添加動畫效果

public class MainActivity extends ActionBarActivity {
    private Button mButton;
    private RelativeLayout mRelativeLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button) findViewById(R.id.shake);
        mRelativeLayout = (RelativeLayout) findViewById(R.id.relativelayout);
        final CustomAnimation ca = new CustomAnimation();
        ca.setDuration(1000);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mRelativeLayout.startAnimation(ca);
            }
        });

    }
}


這樣便大功告成!如果喜歡我的博客,請點贊哦

源代碼下載

來自: http://blog.csdn.net/wingichoy/article/details/47122619

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!