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、只改变视图移动时的视觉效果,并未改变其真实位置属性

  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/6006.html

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论