自定义Toast,从顶部掉下,然后再弹一下

先把自定义类赠上,如果您觉得有用,请赞!

import java.util.Timer;
import java.util.TimerTask;

import com.example.viewpageindicator.R;

import android.content.Context;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.Toast;

public class MyToast {

    private LayoutParams mParams;
    private boolean mShowTime;
    private boolean mIsShow;
    private WindowManager mWdm;
    private View mToastView;
    private Timer mTimer;
    private MyToast(Context context, String text, boolean showTime ){
          mShowTime = showTime;//记录Toast的显示长短类型
          mIsShow = false;//记录当前Toast的内容是否已经在显示
          mWdm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
          //通过Toast实例获取当前android系统的默认Toast的View布局
          mToastView = Toast.makeText(context, text, Toast.LENGTH_SHORT).getView();
          mTimer = new Timer();
          //设置布局参数
          setParams();
        }

    public static MyToast MakeText(Context context, String text, boolean showTime) {
        MyToast result = new MyToast(context, text, showTime);
        return result;
    }
    private void setParams() {
        // TODO Auto-generated method stub
         mParams = new WindowManager.LayoutParams();
          mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
          mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
          mParams.format = PixelFormat.TRANSLUCENT;
          mParams.windowAnimations = R.style.anim_view;//设置进入退出动画效果
          mParams.type = WindowManager.LayoutParams.TYPE_TOAST;
          mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
              | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
              | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
          mParams.gravity = Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM;
          mParams.y = 200;
    }
    public void show(){
          if(!mIsShow){//如果Toast没有显示,则开始加载显示
            mIsShow = true;
            mWdm.addView(mToastView, mParams);//将其加载到windowManager上
            mTimer.schedule(new TimerTask() {
              @Override
              public void run() {
                mWdm.removeView(mToastView);
                mIsShow = false;
              }
            }, (long)(mShowTime ? 3500 : 2000));
          }
        }
}

动画xml anim_view

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="anim_view">
        <item name="@android:windowEnterAnimation">@anim/anim_in</item>
        <item name="@android:windowExitAnimation">@anim/anim_out</item>
    </style>
</resources>

anim_in 动画xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <translate
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="0"
    android:toYDelta="100"
    android:duration="100"
    />
  <translate
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="0"
    android:toYDelta="-200"
    android:duration="150"
    android:fillAfter="true"
    android:interpolator="@android:anim/decelerate_interpolator"
    />
    <translate
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="0"
    android:toYDelta="200"
    android:duration="100"
    />
      <translate
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="0"
    android:toYDelta="-100"
    android:duration="150"
    android:fillAfter="true"
    android:interpolator="@android:anim/decelerate_interpolator"
    />
  <alpha
    android:fromAlpha="0"
    android:toAlpha="1"
    android:duration="150"
    />

</set>

anim_out 动画xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="800"/>
</set>

淡出界面!

调用方法 第三个参数为true和false true则3500毫秒false则2000毫秒

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-07 08:13:58

自定义Toast,从顶部掉下,然后再弹一下的相关文章

自定义Toast解决快速点击时重复弹出,排队无止尽

解决办法:自定义MyToast类: public class MyToast { /** 之前显示的内容 */ private static String oldMsg ; /** Toast对象 */ private static Toast toast = null ; /** 第一次时间 */ private static long oneTime = 0 ; /** 第二次时间 */ private static long twoTime = 0 ; /** * 显示Toast * @p

Android 高级自定义Toast及源码解析

Toast概述 Toast的作用 不需要和用户交互的提示框. 更多参见官网:https://developer.android.com/guide/topics/ui/notifiers/toasts.html Toast的简单使用 Toast.makeText(MainActivity.this.getApplicationContext(),"沉迷学习,日渐消瘦",Toast.LENGTH_SHORT).show() 自定义Toast Toast customToast = new

Android自定义Toast

场景 Toast作为一个基本的界面提醒方式,使用还是比较广,但是介于默认样式比较难看外加有些特殊要求,比如需要在Toast的界面上做事件处理啥的,所以衍生出了Toast的自定义样式 默认样式 1 Toast tempToast = Toast.makeText(getApplicationContext(), "默认的Toast样式", 2 Toast.LENGTH_LONG); 3 //可以设置位置 4 //tempToast.setGravity(Gravity.BOTTOM |

自定义Toast排队重复显示问题:

原文 http://blog.csdn.net/baiyuliang2013/article/details/38655495Toast是安卓系统中,用户误操作时或某功能执行完毕时,对用户的一种提示,它没有焦点,并在一定时间内会消失,但用户连续误操作(如登录时,密码错误)多次时,则会有多个Toast被创建,系统会把这些toast放进队列中,等待上个Toast 显示完毕,接着显示下一个,那么用户则会看到多次Toast提示,无论你退出软件与否,这样给用户的体验则大打折扣,所以我们需要做的是,若Toa

微信小程序之自定义toast弹窗

微信小程序里面的自带弹窗icon只有两种,success和loading.有时候用户输入错误的时候想加入一个提醒图标,也可以使用wx.showToast中的image来添加图片达到使用自定义图标的目的:但是如果图标是字体,或者提醒的内容有很长捏(小程序中提醒的内容最多只能设置7个字,多了会被隐藏),那就只有自定义toast弹窗了: 第一步:新建一个wxml文件用来装模板,方便以后使用,比如 然后在这里面添加模板代码 <template name="toast"> //nam

自定义Toast,显示号码归属地的 CustomToast

public class CustomToast implements OnTouchListener { private Context mContext; private View view; private WindowManager windowManager; private int startX; private int startY; private WindowManager.LayoutParams params; public CustomToast(Context cont

Android带图片的Toast(自定义Toast)

使用Android默认的Toast Toast简介: Toast是一个简单的消息显示框,能够短暂的出现在屏幕的某个位置,显示提示消息. 默认的位置是屏幕的下方正中,一般Toast的使用如下: Toast.makeText(this,"1222222",Toast.LENGTH_SHORT).show(); Toast是static修饰的静态类,意味着可以直接使用,所以可以不用创建对象直接调用makeText方法, 该方法需要传入三个参数: /** * Make a standard t

Android Toast进阶——自定义Toast

进阶目标 上一篇博客我们学习了Toast的源码,了解了Toast从显示到消失的全过程,学习链接:Android Toast源码分析 .俗话说的好,学以致用.我们学习Toast源码不是用来炫技的,而是用来了解Toast原理,从而真正解决我们问题的.下面我就提两个业务中可能遇到的跟Toast相关的真实问题,看看学习了Toast源码之后,该如何解决这些问题.两个问题是: 如何自定义Toast的显示时间. 如何修改Toast的出现动画. 接下来,我们分别讲解阅读了Toast源码之后,如何解决这两个业务中

Android之十一Toast 自定义Toast的实现方法,及其说明

Android Toast 自定义Toast的实现方法,及其说明 Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失.信息可以是简单的文本,也可以是复杂的图片及其他内容(显示一个view).  1.简单用法 Toast.makeText(midlet.getApplicationContext(), "用户名不能为空", Toast.LENGTH_LONG).show(); 2.自定义显示位置效果 代码 toast = Toast.makeText(