編輯:關於Android編程
下彈動畫在很多應用都有使用,比如豌豆莢中的應用介紹界面,百度手機助手的應用介紹界面等。
只要熟悉android動畫的使用接口,制作動畫並不困難。 這裡使用開源庫nineoldandroids,其實和android3.0 以上直接使用動畫接口是一樣的。
實現效果
PS, 搞了半天GIF 才能播放。原來是最大邊不能太大了。原來圖片尺寸太大,被默認轉成jpg了。現在總算能看到效果了。
DropDownExample.java
package com.buptfarmer.devapp; import com.nineoldandroids.animation.Animator; import com.nineoldandroids.animation.AnimatorListenerAdapter; import com.nineoldandroids.animation.ValueAnimator; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; public class DropDownExample extends Activity implements OnClickListener { private View mHolder; private View mHolder2; // private static final int DURATION = 2000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); } private void initView() { setContentView(R.layout.drop_down_example); mHolder = findViewById(R.id.holder); mHolder2 = findViewById(R.id.holder2); mHolder.setOnClickListener(this); mHolder2.setOnClickListener(this); } public static ValueAnimator createHeightAnimator(final View view, int start, int end) { ValueAnimator animator = ValueAnimator.ofInt(start, end); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int value = (Integer) valueAnimator.getAnimatedValue(); ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.height = value; view.setLayoutParams(layoutParams); } }); // animator.setDuration(DURATION); return animator; } public static void animateExpanding(final View view) { view.setVisibility(View.VISIBLE); final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); view.measure(widthSpec, heightSpec); ValueAnimator animator = createHeightAnimator(view, 0, view.getMeasuredHeight()); animator.start(); } public static void animateCollapsing(final View view) { int origHeight = view.getHeight(); ValueAnimator animator = createHeightAnimator(view, origHeight, 0); animator.addListener(new AnimatorListenerAdapter() { public void onAnimationEnd(Animator animation) { view.setVisibility(View.GONE); }; }); animator.start(); } @Override public void onClick(View v) { if (v == mHolder) { if (View.GONE == mHolder.findViewById(R.id.hiddenview).getVisibility()) { animateExpanding(mHolder.findViewById(R.id.hiddenview)); } else { animateCollapsing(mHolder.findViewById(R.id.hiddenview)); } } else if (v == mHolder2) { if (View.GONE == mHolder2.findViewById(R.id.hiddenview).getVisibility()) { animateExpanding(mHolder2.findViewById(R.id.hiddenview)); } else { animateCollapsing(mHolder2.findViewById(R.id.hiddenview)); } } } }drop_down_example.xml
前言樣本測試後的掃描時間對比和漏洞項專業對比後,本篇將以各個廠商的掃描能力作為分析維度展開。測試方法使用自己編寫的測試APP測試各個掃描平台的掃描能力。這些掃描能力主要分
先簡單介紹一下shape的基本屬性:
Android基礎入門教程——7.6.2 基於TCP協議的Socket通信(1)標簽(空格分隔): Android基礎入門教程本節引言: 上一節的
最近用Unity3D導出Apk到手機上出現的問題,開始可以正常安裝到手機上。然而在我將導出的Apk在電腦的模擬機運行了幾次之後,再導入到手機上卻一直安裝失敗。後來在Pla