package io.bxbxbai.zhuanlan.widget; import android.content.Context; import android.os.SystemClock; import android.view.*; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import io.bxbxbai.zhuanlan.R; public class FloatView extends RelativeLayout { private float mTouchStartX; private float mTouchStartY; private int x; private int y; private ImageView imageLogo; private TextView textTraffic; private ProgressBar progressBar; private WindowManager windowManager; private WindowManager.LayoutParams wmParams; private Boolean showFlag = false; private Boolean updateFlag = false; int i = 0; public FloatView(Context context) { super(context); windowManager = (WindowManager) getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE); wmParams = new WindowManager.LayoutParams(); LayoutInflater.from(context).inflate(R.layout.layout_floatview, this); imageLogo = (ImageView) findViewById(R.id.image_logo); textTraffic = (TextView) findViewById(R.id.text_traffic); progressBar = (ProgressBar) findViewById(R.id.bar_progressbar); textTraffic.setText("test"); new Thread(new Runnable() { @Override public void run() { while (true) { SystemClock.sleep(1000); i += 20; FloatView.this.post(new Runnable() { @Override public void run() { progressBar.setProgress(i); } }); if (i > 100) { i = 0; } } } }).start(); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mTouchStartX = event.getRawX(); mTouchStartY = event.getRawY(); x = wmParams.x; y = wmParams.y; updateFlag = true; break; case MotionEvent.ACTION_MOVE: int xDistance = (int) (event.getRawX() - mTouchStartX); wmParams.x = x + xDistance; int yDistance = (int) (event.getRawY() - mTouchStartY); wmParams.y = y + yDistance; updateViewPosition(); break; case MotionEvent.ACTION_UP: int xUpDistance = (int) (event.getRawX() - mTouchStartX); wmParams.x = x + xUpDistance; int yUpDistance = (int) (event.getRawY() - mTouchStartY); wmParams.y = y + yUpDistance; updateViewPosition(); updateFlag = false; break; } return true; } public void removeView() { if (showFlag) { windowManager.removeView(this); showFlag = false; } } public void updateViewPosition() { windowManager.updateViewLayout(this, wmParams); showFlag = true; } }