2

我尝试构建具有以下行为的小部件:仅在显示小部件时更新。让我再解释一下。假设智能手机可能有 3 个主屏幕,一个、两个和三个。小部件将放置在屏幕 3 上,如果您激活智能手机,它将在屏幕 1 上启动。因此,我只想在用户将屏幕更改为屏幕 3 时更新小部件,我想对此事件做出反应。android有没有机会做到这一点?

据我所知,不幸的是没有办法做到这一点,没有任何变化可以了解可见性变化或类似的事情。我在 Google 上找了几个小时,但没有找到任何有趣的东西。有人有其他信息吗?我很高兴有任何提示;希望你能帮帮我。

4

1 回答 1

0

您可以尝试使用 dispatchTouchEvent (希望您可以获得要检查的视图的 x,y 坐标。)

脚步 :

  1. 让 containerView 成为包含您的视图的视图。
  2. 为您的视图设置一个 ontouchlistener。
  3. 当屏幕发生变化或需要检查视图是否可见时,使用包含视图坐标的 MotionEvent 启动 dispatchTouchEvent 调用。
  4. 如果您的视图在该坐标区域中,则将调用您的视图的触摸事件。

例如 :

    containerView = LayoutInflater.from(this).inflate(
            R.layout.activity_main, null);
    setContentView(containerView);
            yourView = containerView.findViewById(R.id.yourView);
            yourView .setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Toast.makeText(MainActivity.this, "View visible",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
    });

当您需要检查时,请执行以下代码:

public void doCheck() {
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    float x = 100f; //yourView x coordinate
    float y = 100f; //yourView y coordinate
    int metaState = 0;
    MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime,
            MotionEvent.ACTION_DOWN, x, y, metaState);
    containerView.dispatchTouchEvent(motionEvent);
}

希望这会有所帮助。

于 2013-05-07T12:46:06.357 回答