zoukankan      html  css  js  c++  java
  • Android开发之50个常见实用技巧——添加悦目的动画效果

    Hack.5 使用TextSwitcher和ImageSwitcher实现平滑过渡

      实现步骤:

        1、通过findViewById()方法获取TextSwitcher对象的引用Swithcer,当然也可直接在代码中构造持续对象;

        2、通过Switcher.setFactory()方法指定TextSwitcher的ViewFactory;

        3、通过Switcher的.setInAnimation()方法设置换人动画效果;

        4、通过Switcher.setOutAnimation 方法设置换出动画效果。

      代码如下:

     1 private TextSwitcher mTextSwitcher;
     2 
     3 @Override
     4 public void onCreate(Bundle savedInstanceState) {
     5     super.onCreate(savedInstanceState);
     6     setContentView(R.layout.main);
     7     Animation in = AnimationUtils.loadAnimation(this,
     8     android.R.anim.fade_in);
     9     Animation out = AnimationUtils.loadAnimation(this,
    10     android.R.anim.fade_out);
    11     mTextSwitcher = (TextSwitcher) findViewById(R.id.your_textview);
    12     mTextSwitcher.setFactory(new ViewFactory() {
    13         @Override
    14         public View makeView() {
    15               TextView t = new TextView(YourActivity.this);
    16               t.setGravity(Gravity.CENTER);17         return t;
    18     }
    19   });
    20   mTextSwitcher.setInAnimation(in);
    21   mTextSwitcher.setOutAnimation(out);
    22 }

    Hack.6 为ViewGroup的子视图添加悦目的动画效果

      步骤:

        1、获取ListView的引用;

        2、创建默认动画集合对象,AnimationSet;

        3、创建透明度渐变动画,移位动画,分别为AlphaAnimation,TranslateAnimation;

        4、创建LayoutAnimationController对象并设置子视图,动画效果持续时间;

        5、将LayoutAnimationController对象设置到ListView中;

        关键代码如下:

    mListView = (ListView) findViewById(R.id.my_listview_id);
    
    AnimationSet set = new AnimationSet(true);
    
    Animation animation = new AlphaAnimation(0.0f, 1.0f);
    animation.setDuration(50);
    set.addAnimation(animation);
    
    animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
    Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
        -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
    animation.setDuration(100);
    set.addAnimation(animation);
    
    LayoutAnimationController controller = 
        new LayoutAnimationController(set, 0.5f); mListView.setLayoutAnimation(controller);

       

     Hcak.7 在Canvas上显示动画 

      关于Canvas:  

        可以把 Canvas 视为 Surface 的替身或者接口,图形便是绘制在 Surface 上的。Canvas 封装了所有绘图调用。通过 Canvas,绘制

      到 Surface 上的内容首先存储到与之关联的 Bitmap 中,该 Bitmap最终会呈现到窗口上。

        在onDraw()方法中调用。。。

      关键代码如下:

        Activity代码:

    public class MainActivity extends Activity {
        private DrawView mDrawView;
        @Override
        public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             Display display = getWindowManager().getDefaultDispla y();
             mDrawView = new DrawView(this);
             mDrawView.height = display.getHeight();
             mDrawView.width = display.getWidth();
             setContentView(mDrawView);
        }
    }

        DrawView类:

    public class DrawView extends View {
        private Rectangle mRectangle;
        public int width;
        public int height;
        public DrawView(Context context) {
            super(context);
            mRectangle = new Rectangle(context, this);
            mRectangle.setARGB(255, 255, 0, 0);
            mRectangle.setSpeedX(3);
            mRectangle.setSpeedY(3);
        }
        @Override
        protected void onDraw(Canvas canvas) {
            mRectangle.move();
            mRectangle.onDraw(canvas);
            invalidate();
        }
    }

      分析:

        1、创建一个Rectangle实例,代表一个方块;Rectangle类内部实现了将自身绘制到Canvas上的逻辑,

          并且已经包含了正确变换其位置的代码逻辑。

        2、当调用onDraw()方法时,通过move()方法,方块的位置就会改变

        3、通过onDraw()方法绘制到Canvas上;

        4、在invalidate()中,强制重绘视图。

      其实,就是通过循环调用Rectangle的move()和onDraw()方法实现一个动画效果。

    Hack.8 附加Ken Burns 特效的幻灯片

      要创建Ken Burns特效,需要预设一些动画

      案例分析:

        将动画随机应用到ImageView,当一个动画显示完毕,即开始显示另一个动画和图片;

        主布局使用FrameLayout,把ImageView置于该布局;

      代码如下:

        略。。。

      旧动画API的特点:  

        1、只支持视图对象的动画效果

        2、仅限于移动、旋转、缩放、渐变等效果

        3、只改变视图移动时的视觉效果,并未改变其真实位置属性

      

  • 相关阅读:
    event.relatedTarget、event.fromElement、event.toElement
    before/after伪类常见用法
    $.getJSON 跨域
    ExtJS中store.findExact
    C#生成6位随机验证码
    C#验证手机号
    jQuery轮播图的事项 代码详细,容易理解。。。。谢谢观赏
    ES6 中 static 的this 丢失问题解决办法 简单明了 备注清晰 谢谢欣赏
    ES6 中 static 的this 问题 简单明了 备注清晰 谢谢欣赏
    ES6 中用class创建img 详细明了,步骤清晰,解释完美,谢谢欣赏
  • 原文地址:https://www.cnblogs.com/jesonjason/p/5437028.html
Copyright © 2011-2022 走看看