Toast 自定义显示位置,toast和通讯录的a-z 一起走 部分代码

本文介绍了如何在Android中自定义Toast的显示位置,通过设置Gravity和坐标偏移实现。同时展示了在滑动字母时,如何取消上一个字母的Toast显示,实现与通讯录A-Z字母的交互效果。
Toast的显示位置可以我们自己设置,通过如下命令:
toast = Toast.makeText(getContext(), "" + (char) ('A' + position),Toast.LENGTH_SHORT);
//可以控制toast显示的位置
toast.setGravity(Gravity.LEFT, xoffset, yoffset);
toast.show();

同时我们通过toast.cancle()可以用来取消一个toast,这在我们滑动到下一个字母的时候,就可以取消掉上一个字母的显示。
if(toast!=null)toast.cancel();


package com.zqxue.Review151222;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by XUE on 2015/12/22.
 */
public class SimpleView extends LinearLayout {
    private Paint paint;
    private float stopY;
    private Toast toast;

    public SimpleView(Context context) {
        super(context);
    }

    public SimpleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context,attrs);

    }

    public void init(Context context,AttributeSet attrs){
        paint = new Paint();
        paint.setColor(Color.RED);

        for (int i = 0; i < 26; i++) {
            TextView textView = new TextView(context);
            String text = Character.toString((char)('A'+i));

            textView.setText(text);
            ViewGroup.LayoutParams layoutParams = new LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    0,
                    1
            );
            textView.setLayoutParams(layoutParams);

            //textSize
            int height = getHeight();
            int textSize = height/26-2;

            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
            textView.setGravity(Gravity.RIGHT);
            addView(textView);
        }
    }

    private int currentPosition=-1;
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        boolean ret = false;
        int action = event.getAction();
        float ex = event.getX();
        float ey = event.getY();
        stopY=ey;
        int position = -1;
        String type = "";
        switch (action){
            case MotionEvent.ACTION_DOWN:
                type ="DOWN";
                currentPosition=-1;
                //toast
                if(toast!=null)toast.cancel();
                toast = Toast.makeText(getContext(), "" + (char) ('A' + position),
                        Toast.LENGTH_SHORT);
                Log.d("151222MY","LONG="+Toast.LENGTH_LONG+"  SHORT="+Toast.LENGTH_SHORT+ ex+""+ey);
                //可以控制toast显示的位置
                //toast.setGravity(Gravity.LEFT, right + child.getWidth() + 200, bottom - getHeight() / 2);
                toast.setGravity(Gravity.LEFT, getWidth() - 150, (int) ey - getHeight() / 2);

                toast.show();
                ret=true;
                break;
            case MotionEvent.ACTION_MOVE:
                int childCount = getChildCount();
                for (int i = 0; i < childCount; i++) {
                    View child = getChildAt(i);
                    int top = child.getTop();
                    int left = child.getLeft();
                    int right = child.getRight();
                    int bottom = child.getBottom();
                    if(top<=ey&&left<=ex){
                        if(right>=ex&&bottom>=ey){
                            position = i;
                        }
                    }
                    if(position>-1&&currentPosition!=position){
                        Log.d("151222MY","click "+position);
                        Log.d("151222MY","click"+(char)('A'+position));
                        currentPosition=position;
                        if(toast!=null)toast.cancel();
                        toast = Toast.makeText(getContext(), "" + (char) ('A' + position),
                                Toast.LENGTH_SHORT);
                        Log.d("151222MY","LONG="+Toast.LENGTH_LONG+"  SHORT="+Toast.LENGTH_SHORT);
                        //可以控制toast显示的位置
                        //toast.setGravity(Gravity.LEFT, right + child.getWidth() + 200, bottom - getHeight() / 2);
                        toast.setGravity(Gravity.LEFT, getWidth()-150, (int)ey - getHeight() / 2);

                        toast.show();
                    }
                }
                type="MOVE";
                break;
            case MotionEvent.ACTION_UP:
                type="UP";
                break;
        }
        //Log.d("151222MY", type);

        return ret;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawLine(0, 0, 300, stopY, paint);
        Log.d("151222MY","onDraw");
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值