为什么我无法在扩展BroadcastReceiver的活动中使用imageview?

时间:2016-08-18 16:33:45

标签: android service imageview broadcastreceiver

下面是我的ChatHeadService类,我在oncreate()方法中创建一个新的imageview,我可以看到imageview。我正在使用它的方式类似于聊天头和我的OnTouchListener工作,但onClickListener不工作我想要在点击图片视图时打开一个新活动,但即使吐司没有出现也无法正常工作。请提前获取任何帮助。

package com.tarun.notifyme2;

    import android.app.Service;
    import android.content.Intent;
    import android.graphics.PixelFormat;
    import android.os.IBinder;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.ImageView;
    import android.widget.Toast;

    public class ChatHeadService extends Service {

        private WindowManager windowManager;
        private ImageView chatHead;
        WindowManager.LayoutParams params;
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            int res = super.onStartCommand(intent, flags, startId);
            return res;
        }
        @Override
        public void onCreate() {
            super.onCreate();

            windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

            chatHead = new ImageView(this);
            chatHead.setImageResource(R.drawable.app_icon);
            chatHead.setClickable(true);
            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 = 200;
            chatHead.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(getApplicationContext(),"You clicked  the imageview",Toast.LENGTH_LONG).show();
                    Log.i("tag","You clicked the imageview");
                    Intent i = new Intent(view.getContext(),SendNoti.class);
                    startActivity(i);
                    stopSelf();
                }
            });

            //this code is for dragging the chat head
            chatHead.setOnTouchListener(new View.OnTouchListener() {
                private int initialX;
                private int initialY;
                private float initialTouchX;
                private float initialTouchY;


                @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();
                        return true;
                    case MotionEvent.ACTION_UP:
                        return true;
                    case MotionEvent.ACTION_MOVE:
                        params.x = initialX
                                + (int) (event.getRawX() - initialTouchX);
                        params.y = initialY
                                + (int) (event.getRawY() - initialTouchY);
                        windowManager.updateViewLayout(chatHead, params);
                        return true;
                    default:
                        return false;
                    }
                }
            });
            windowManager.addView(chatHead, params);
        }

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

        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
    }

1 个答案:

答案 0 :(得分:0)

你是"吞咽"您在onTouch(View v, MotionEvent event)内的触摸事件返回true(表示您完成了所有操作,而不是通知onClick,onLongClick等)。你可以模仿" onClick通过在ACTION_MOVE中设置一些标记并在ACTION_UP中检查它是否为最后一次"触摸操作"正在移动或只是向下/向上点击(然后返回false或只是在没有任何onClick设置的情况下编写代码)