zoukankan      html  css  js  c++  java
  • Android自定义吐司

    1. 初始化项目:主要是几个按钮,分别调起展示销毁和移动等方法.

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:weightSum="3">
    
        <Button
            android:id="@+id/btn_dispaly"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Display" />
    
        <Button
            android:id="@+id/btn_gone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Gone" />
        
        <Button
            android:id="@+id/btn_move"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Move" />
    </LinearLayout>
    layout.xml
    public class MainActivity extends Activity implements OnClickListener{
    
        /**
         * button display
         */
        private Button btnDisplay;
        
        /**
         * button gone
         */
        private Button btnGone;
        
        /**
         * button move
         */
        private Button btnMove;
        
        /**
         * def toast class
         */
        private MyToast myToast;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            
            setContentView(R.layout.activity_main);
            
            init();
        }
    
        private void init() {
            btnDisplay = (Button) this.findViewById(R.id.btn_dispaly);
            btnDisplay.setOnClickListener(this);
            
            btnGone = (Button) this.findViewById(R.id.btn_gone);
            btnGone.setOnClickListener(this);
            
            btnMove = (Button) this.findViewById(R.id.btn_move);
            btnMove.setOnClickListener(this);
            
            myToast = new MyToast(this);
        }
    
        @Override
        public void onClick(View v) {
            if(v.getId() == R.id.btn_dispaly){
                myToast.simpleDisplay("show toast for test");
            }
            
            if(v.getId() == R.id.btn_move){
                myToast.moveToast("move toast for test");
            }
            
            if(v.getId() == R.id.btn_gone){
                myToast.destoryToast();
            }
        }
    }
    MainActivity

    2. 定义Toast类:MyToast

    public class MyToast {
    
        /**
         * View inflater
         */
        private LayoutInflater inflater = null;
    
        /**
         * prop window for toast
         */
        private WindowManager windowManage;
    
        /**
         * Toast show view
         */
        private View view = null;
    
        /**
         * toast show params
         */
        private WindowManager.LayoutParams params = null;
    
        /**
         * 
         * @param context
         */
        public MyToast(Context context) {
            inflater = LayoutInflater.from(context);
    
            params = new WindowManager.LayoutParams();
    
            windowManage = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        }
    
        /**
         * toast display and moveable
         * @param text
         */
        public void moveToast(String text) {
            checkParamsEnv(text);
            
            // inflate view
            view = inflater.inflate(R.layout.activity_toast, null);
            
            // init toast view
            TextView tvDesc = (TextView) view.findViewById(R.id.tv_toast_desc);
    
            tvDesc.setText(text);
            
            // set display location
            params.gravity = Gravity.CENTER;
    
            params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    
            params.height = WindowManager.LayoutParams.WRAP_CONTENT;
            
            // add touch listener for move
            view.setOnTouchListener(new OnTouchListener() {
                
                int initX,initY;
                
                @Override
                public boolean onTouch(View v, MotionEvent event) {
    
                    switch (event.getAction()) {
                    
                    // touch down
                    case MotionEvent.ACTION_DOWN:
                        
                        initX = (int) event.getRawX();
                        
                        initY = (int) event.getRawY();
                        
                        break;
                    
                    // touch move
                    case MotionEvent.ACTION_MOVE:
                        
                        int newX = (int) event.getRawX();
                        
                        int newY = (int) event.getRawY();
                        
                        int dx = newX - initX;
                        
                        int dy = newY - initY;
                        
                        params.x += dx;
                        
                        params.y += dy;
                        
                        windowManage.updateViewLayout(view, params);
                        
                        initX = (int) event.getRawX();
                        
                        initY = (int) event.getRawY();
                        
                        break;
                    
                    // touch up
                    case MotionEvent.ACTION_UP:
                        break;
                    default:
                        break;
                    }
    
                    return false;
                }
            });
            
            // set params flags for keep screen on and no focusable
            params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
            
            params.format = PixelFormat.TRANSLUCENT;
            
            // toast display type
            params.type = WindowManager.LayoutParams.TYPE_TOAST;
    
            // pop window 
            windowManage.addView(view, params);
        }
    
        /**
         * simple toast show
         * @param text
         */
        public void simpleDisplay(String text) {
    
            checkParamsEnv(text);
    
            view = inflater.inflate(R.layout.activity_toast, null);
    
            TextView tvDesc = (TextView) view.findViewById(R.id.tv_toast_desc);
    
            tvDesc.setText(text);
    
            params.gravity = Gravity.CENTER;
    
            params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    
            params.height = WindowManager.LayoutParams.WRAP_CONTENT;
    
            params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
    
            params.format = PixelFormat.TRANSLUCENT;
    
            params.type = WindowManager.LayoutParams.TYPE_TOAST;
    
            windowManage.addView(view, params);
        }
    
        public void destoryToast() {
            if (view != null) {
                windowManage.removeView(view);
            }
        }
    
        private void checkParamsEnv(String text) {
            if (text == null || "".equals(text)) {
                return;
            }
        }
    }
    MyToast
  • 相关阅读:
    PSP编程
    题库软件1.0发布
    ubuntu上安装netgear wg511v2驱动
    boost的编译
    Plot3D 0.3发布
    立体画板Plot3D
    求教团队内的朋友,在directx中,如何画虚线?
    OpenGL如何显示文本?
    JZ028数组中出现次数超过一半的数字
    JZ027字符串的排列
  • 原文地址:https://www.cnblogs.com/cbooy/p/4663030.html
Copyright © 2011-2022 走看看