怎么算按钮preSS时间在android系统? [英] how to count button press time in android?

查看:110
本文介绍了怎么算按钮preSS时间在android系统?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发的,我想对于像如果在5毫秒后,用户扣那么code执行,如果pressing时间更多的则是那么不同势

指出错误的时间不同势任务的项目

其实时间在Facebook上聊天创建chathead像

问题是这样的ActionDown事件我想打开或启动我的应用

但问题是,当用户试图从一个位置重新分配chathead其他事件火

 这是我的code

在这里ACTION_DOWN事件我想意图应用

 公共类ChadHead延伸服务{
  私人最终处理程序mHandler =新的处理程序();
    私人的Runnable mTimer1;
私人窗口管理器窗口管理;
私人ImageView的chatHead;
显示屏显示;
INT宽度;
    诠释计数= 0;
@覆盖
公众的IBinder onBind(意向意图){
    // 不曾用过
    返回null;
}@覆盖
公共无效的onCreate(){
    super.onCreate();     mTimer1 =新的Runnable(){            @覆盖
            公共无效的run(){
                算上++;
                // TODO自动生成方法存根
                mHandler.postDelayed(这一点,5000);
                如果(计数== 1){
                    mHandler.removeCallbacks(mTimer1);
                    //把你的code在这里:
                }
            }
        };    窗口管理=(窗口管理器)getSystemService(WINDOW_SERVICE);    chatHead =新ImageView的(本);
    chatHead.setImageResource(R.drawable.ic_launcher);    最后WindowManager.LayoutParams PARAMS =新WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;    windowManager.addView(chatHead,则params);    chatHead.setOnTouchListener(新View.OnTouchListener(){
        私人诠释initialX;
        私人诠释initialY;
        私人浮动initialTouchX;
        私人浮动initialTouchY;        @燮pressWarnings(德precation)
        @覆盖
        公共布尔onTouch(视图V,MotionEvent事件){
            开关(event.getAction()){
            案例MotionEvent.ACTION_DOWN:
                initialX = params.x;
                initialY = params.y;
                initialTouchX = event.getRawX();
                initialTouchY = event.getRawY();                 mHandler.postDelayed(mTimer1,0);
                / *意图我;
                软件包管理系统经理= getPackageManager();
                尝试{
                   I = manager.getLaunchIntentForPackage(com.technorapper.technorappermapp);
                如果(我== NULL)
                    抛出新PackageManager.NameNotFoundException();
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                startActivity(ⅰ);
                }赶上(PackageManager.NameNotFoundException E){                } * /
                Toast.makeText(getApplicationContext(),TechnoRapper,50)
                        。显示();                返回true;
            案例MotionEvent.ACTION_MOVE:
                params.x = initialX
                        +(int)的(event.getRawX() - initialTouchX);
                params.y = initialY
                        +(int)的(event.getRawY() - initialTouchY);
                windowManager.updateViewLayout(chatHead,则params);                显示= windowManager.getDefaultDisplay();
                宽度= display.getWidth();                返回true;
            案例MotionEvent.ACTION_UP:
                 计数= 0;
                如果(initialTouchX<宽度/ 2){
                    initialTouchX = 0;
                }否则如果(initialTouchX> =宽度/ 2){
                    initialTouchX =宽度;
                }
                返回true;
            }
            返回false;
        }
    });}@覆盖
公共无效的onDestroy(){
    super.onDestroy();
    如果(chatHead!= NULL)
        windowManager.removeView(chatHead);
}
  }


解决方案

我面对它,已有3个月前,这里是我的解决方案:

 私人诠释计数= 0;
    按钮BTN;
    私人最终处理程序mHandler =新的处理程序();
    私人的Runnable mTimer1;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        BTN =(按钮)findViewById(R.id.btn);
        mTimer1 =新的Runnable(){            @覆盖
            公共无效的run(){
                算上++;
                // TODO自动生成方法存根
                mHandler.postDelayed(这一点,500);
                如果(计数== 1){
                    mHandler.removeCallbacks(mTimer1);
                    //把你的code在这里:
                我的意图;
                软件包管理系统经理= getPackageManager();
                尝试{
                   I = manager.getLaunchIntentForPackage(com.technorapper.technorappermapp);
                如果(我== NULL)
                    抛出新PackageManager.NameNotFoundException();
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                startActivity(ⅰ);
                }赶上(PackageManager.NameNotFoundException E){                }                }
            }
        };
        btn.setOnTouchListener(新OnTouchListener(){            私人诠释initialX;
            私人诠释initialY;
            私人浮动initialTouchX;
            私人浮动initialTouchY;            @覆盖
            公共布尔onTouch(视图V,最终MotionEvent事件){
                开关(event.getAction()){
                案例MotionEvent.ACTION_DOWN:
                    initialX =(int)的btn.getX();
                    initialY =(int)的btn.getY();
                    initialTouchX = event.getRawX();
                    initialTouchY = event.getRawY();
                    mHandler.postDelayed(mTimer1,0);
                    返回true;
                案例MotionEvent.ACTION_UP:
                    计数= 0;
                    返回true;
                案例MotionEvent.ACTION_MOVE:
                    runOnUiThread(新的Runnable(){
                        公共无效的run(){
                            btn.setX(initialX
                                    +(int)的(event.getRawX() - initialTouchX));
                            btn.setY(initialY
                                    +(int)的(event.getRawY() - initialTouchY));
                        }
                    });                    返回true;
                }
                返回false;
            }
        });

本code你可以移动chathead后500毫秒时开始。无需使用OnClickListener,检查位置没有改变,因此其检测为OnClickListener。结果
 如果你想在捕捉一些动作停止OnTouch事件,只是把布尔变量在ACTION_MOVE

I am Developing an project in which i want diffrent task for diffrent time like if user button up after 5 milisecond then a code execute and if pressing time is more then that then a diffrent

actually em creating a chathead like in facebook chat

problem is this on ActionDown Event i want to open or launch my app

but problem is when user try to reallocate the chathead from one location to other the event fire like

 This is my code

here in ACTION_DOWN event i want to intent to the app

      public class ChadHead extends Service {
  private final Handler mHandler = new Handler();
    private Runnable mTimer1;
private WindowManager windowManager;
private ImageView chatHead;
Display display;
int width;
    int count=0;


@Override
public IBinder onBind(Intent intent) {
    // Not used
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

     mTimer1 = new Runnable() {

            @Override
            public void run() {
                count++;
                // TODO Auto-generated method stub
                mHandler.postDelayed(this, 5000);
                if (count == 1) {
                    mHandler.removeCallbacks(mTimer1);
                    // put your code here:
                }
            }
        };



    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    chatHead = new ImageView(this);
    chatHead.setImageResource(R.drawable.ic_launcher);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;

    windowManager.addView(chatHead, params);

    chatHead.setOnTouchListener(new View.OnTouchListener() {
        private int initialX;
        private int initialY;
        private float initialTouchX;
        private float initialTouchY;

        @SuppressWarnings("deprecation")
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                initialX = params.x;
                initialY = params.y;
                initialTouchX = event.getRawX();
                initialTouchY = event.getRawY();

                 mHandler.postDelayed(mTimer1, 0);
                /*Intent i;
                PackageManager manager = getPackageManager();
                try {
                   i = manager.getLaunchIntentForPackage("com.technorapper.technorappermapp");
                if (i == null)
                    throw new PackageManager.NameNotFoundException();
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                startActivity(i);
                } catch (PackageManager.NameNotFoundException e) {

                }*/


                Toast.makeText(getApplicationContext(), "TechnoRapper", 50)
                        .show();

                return true;
            case MotionEvent.ACTION_MOVE:
                params.x = initialX
                        + (int) (event.getRawX() - initialTouchX);
                params.y = initialY
                        + (int) (event.getRawY() - initialTouchY);
                windowManager.updateViewLayout(chatHead, params);

                display = windowManager.getDefaultDisplay();
                width = display.getWidth();

                return true;
            case MotionEvent.ACTION_UP:
                 count = 0;
                if (initialTouchX < width / 2) {
                    initialTouchX = 0;
                } else if (initialTouchX >= width / 2) {
                    initialTouchX = width;
                }
                return true;
            }
            return false;
        }
    });

}

@Override
public void onDestroy() {
    super.onDestroy();
    if (chatHead != null)
        windowManager.removeView(chatHead);
}
  }

解决方案

I faced it since 3 month ago, here is my solution:

 private int count = 0;
    Button btn;
    private final Handler mHandler = new Handler();
    private Runnable mTimer1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.btn);
        mTimer1 = new Runnable() {

            @Override
            public void run() {
                count++;
                // TODO Auto-generated method stub
                mHandler.postDelayed(this, 500);
                if (count == 1) {
                    mHandler.removeCallbacks(mTimer1);
                    // put your code here:
                Intent i;
                PackageManager manager = getPackageManager();
                try {
                   i = manager.getLaunchIntentForPackage("com.technorapper.technorappermapp");
                if (i == null)
                    throw new PackageManager.NameNotFoundException();
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                startActivity(i);
                } catch (PackageManager.NameNotFoundException e) {

                }

                }
            }
        };
        btn.setOnTouchListener(new OnTouchListener() {

            private int initialX;
            private int initialY;
            private float initialTouchX;
            private float initialTouchY;

            @Override
            public boolean onTouch(View v, final MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    initialX = (int) btn.getX();
                    initialY = (int) btn.getY();
                    initialTouchX = event.getRawX();
                    initialTouchY = event.getRawY();
                    mHandler.postDelayed(mTimer1, 0);
                    return true;
                case MotionEvent.ACTION_UP:
                    count = 0;
                    return true;
                case MotionEvent.ACTION_MOVE:
                    runOnUiThread(new Runnable() {
                        public void run() {
                            btn.setX(initialX
                                    + (int) (event.getRawX() - initialTouchX));
                            btn.setY(initialY
                                    + (int) (event.getRawY() - initialTouchY));
                        }
                    });

                    return true;
                }
                return false;
            }
        });

with this code you can move your chathead and the event start after 500 milisecond. No need to use OnClickListener, check if position not change so detect it as OnClickListener.
And if you want to stop OnTouch event when catch some action, just put 'boolean variable' in ACTION_MOVE

这篇关于怎么算按钮preSS时间在android系统?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆