zoukankan      html  css  js  c++  java
  • framelayout

    编写的mail.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frame"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center" >

    </FrameLayout>

    在该布局文件中定义一个 id 为 frame 的帧布局文件。

    package lyz.test;

    import android.app.Activity;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.FrameLayout;

    public class FramelayoutTestActivity extends Activity {
    FrameLayout frame = null;
    boolean flag = true;
    class MyHandler extends Handler {
    int i = 0;
    public void handleMessage(Message msg) {
    i++;
    show(i % 3);
    sleep(50);
    }
    public void sleep(long delayMillis) {
    if (flag) {
    this.sendMessageDelayed(this.obtainMessage(0), delayMillis);
    }
    }
    }


    void show(int i) {
    Drawable a = getResources().getDrawable(R.drawable.a1);
    Drawable b = getResources().getDrawable(R.drawable.a2);
    Drawable c = getResources().getDrawable(R.drawable.a3);
    switch (i) {
    case 0:
    frame.setForeground(a);
    break;
    case 1:
    frame.setForeground(b);
    break;
    case 2:
    frame.setForeground(c);
    break;
    }
    }

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    frame = (FrameLayout) findViewById(R.id.frame);
    final MyHandler myHandler = new MyHandler();
    myHandler.sleep(50);
    frame.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
    // TODO Auto-generated method stub
    flag = !flag;
    myHandler.sleep(10);
    }
    });
    }
    }

    说明:
    由于 FrameLayout 中后出现的 UI 控件会覆盖前面出现的 UI 控件,每次只能显示一个 UI 控件,因此,我们可以通过在 Activity 中对每次显示的图片内容进行切换以实现动画效果 。 或许你会想到开启一条线程来控制切换 , 但在非主线程中不能更新 UI 界面 , 所以 , 我们使用了Android 提供的消息通讯类 Handler 。该类可以实现非主线程和负责 UI 的主线程之间的通信 ,进而间接实现非主线程更新 UI 界面。由于 sleep 方法中的sendMessageDelayed(obtainMessage(0), delayMillis); 本身会延迟发送一个消息 , 该消息
    会被框架传递给 handleMessage 事件 。 我们在 handleMessage() 方法中再次调用 sleep() 方法 ,形成一个循环调用 。 在我们对界面进行点击之前 , 两个方法会一直循环调用 。 前景图片也会不断的切换,进而实现动画的效果。


    点击图片之后,小鸟停止飞翔。

     

  • 相关阅读:
    面试系列三 如何保证消息不被重复消费
    面试系列二 消息队列的高可用性
    面试系列一 消息队列
    springcloud系列15 bus的使用
    C++ 参数传值 与 传引用
    [转] 写给立志做码农的大学生
    Python format 格式化函数
    [3] TensorFlow 深层神经网络
    [2] TensorFlow 向前传播算法(forward-propagation)与反向传播算法(back-propagation)
    Python 闭包
  • 原文地址:https://www.cnblogs.com/lyz459/p/2534257.html
Copyright © 2011-2022 走看看