Android自定義類似于QQ的消息提示框

jopen 10年前發布 | 2K 次閱讀 Java Android

效果還不錯,整體上是Translate動畫和FrameLayout布局的結合,下面看一下代碼:

activiy_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
   xmlns:tools="http://schemas.android.com/tools&quot;
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

<FrameLayout
   android:layout_width="match_parent"
   android:layout_height="wrap_content" >

    <TextView
       android:id="@+id/toast"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:layout_marginBottom="20dp"
       android:layout_marginTop="40dp"
       android:background="@color/transparent_black"
       android:gravity="center"
       android:paddingBottom="5dp"
       android:paddingLeft="40dp"
       android:paddingRight="40dp"
       android:paddingTop="5dp"
       android:text="@string/toast"
       android:textColor="@color/white"
       android:textSize="16sp"
       android:visibility="invisible" />

    <TextView
       android:id="@+id/title"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:background="@color/blue"
       android:gravity="center"
       android:padding="5dp"
       android:text="@string/title"
       android:textColor="@color/white"
       android:textSize="20sp" />
</FrameLayout>

<TextView
   android:id="@+id/info"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_marginTop="10dp"
   android:gravity="center"
   android:text="@string/hello_world" />

<Button
   android:id="@+id/btn"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_marginTop="30dp"
   android:gravity="center"
   android:text="@string/btn" >
</Button>

</LinearLayout></pre>

MainActivity.java

 package cn.androiddevelop;

import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.TextView; import cn.androiddevelop.test.R;

public class MainActivity extends Activity { TextView rootView; Button btn; Handler handler; TextView tv; Animation mTranslateInAnimation, mTranslateOutAnimation; boolean flag = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rootView = (TextView) findViewById(R.id.info);
    btn = (Button) findViewById(R.id.btn);
    tv = (TextView) findViewById(R.id.toast);

    handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            tv.startAnimation(mTranslateOutAnimation);
            tv.setGravity(View.INVISIBLE);
            super.handleMessage(msg);
        }

    };

    // 定義進入與退出動畫
    mTranslateInAnimation = new TranslateAnimation(
            Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
            Animation.RELATIVE_TO_SELF, -1.5f, Animation.RELATIVE_TO_SELF,
            0);
    mTranslateInAnimation.setDuration(1000);

    mTranslateOutAnimation = new TranslateAnimation(
            Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
            Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
            -1.5f);
    mTranslateOutAnimation.setDuration(1000);

    mTranslateOutAnimation // 動畫顯示結束后將tv控件隱藏
            .setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    tv.setVisibility(View.INVISIBLE);
                    flag = true; // 恢復響應
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                }
            });

    btn.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (flag) { // 第一次點擊按鈕生效,在消息框退出前不響應點擊
                flag = false;
            } else {
                return;
            }

            // 顯示消息框
            tv.startAnimation(mTranslateInAnimation);
            tv.setVisibility(View.VISIBLE);

            new Thread() {
                @Override
                public void run() {
                    try {
                        sleep(3000);
                        handler.sendEmptyMessage(0);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
    });
}

}</pre>

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