国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android浮層圖片拖動并且可點擊效果

2019-10-22 18:18:54
字體:
供稿:網(wǎng)友

最近產(chǎn)品出了個新需求,頁面上出現(xiàn)浮層并且可點擊,代碼實現(xiàn)如下:

Activity中實現(xiàn)浮層圖片:

@Override  public void onResume() {    super.onResume();    createView();     }@Overridepublic void onPause() {  super.onPause();  / 在程序退出(Activity銷毀)時銷毀懸浮窗口  if(floatView!=null && windowManager !=null) {    windowManager.removeView(floatView);    floatView=null;    windowManager = null;    windowManagerParams = null;  }}private void createView() {    if(floatView!=null) return ;    CmsAPI cmsAPI = RestAdapterUtils.getRestAPI(Config.NEW_CMS_URL, CmsAPI.class, this);    cmsAPI.getFloatingAd(new Callback<AdFloating>() {//請求數(shù)據(jù)                 @Override                 public void success(AdFloating adFloating, Response response) {                   if (adFloating != null && "0".equals(adFloating.getErrorCode())) {                     long startTime = adFloating.getStarttime();                     long endTime = adFloating.getEndtime();                     long currentTime = System.currentTimeMillis();//                     LOGD(startTime + " +++++ "+endTime +" "+currentTime +"  "+(currentTime > startTime && currentTime < endTime));                     if (currentTime > startTime && currentTime < endTime) {//活動的有效期                       floatView = new FloatView(getApplicationContext());                       floatView.setOnClickListener(MainActivity.this);                       int height = 240;                       int width = 110;                       float ratio= 1.35f;                       if (!TextUtils.isEmpty(adFloating.getImg2())) {                         try {                           height = Integer.parseInt(adFloating.getImg2h());                           width = Integer.parseInt(adFloating.getImg2w());                           ratio = (float) width / height;                         } catch (Exception e) {                           ratio = 1.35f;                         }                       }//                       floatView.setAspectRatio(ratio);//圖片的大小                       floatView.setImageURI(Uri.parse(adFloating.getImg2()));//設(shè)置圖片的網(wǎng)絡(luò)地址//                       floatView.setImageResource(R.drawable.face_icon); // 這里簡單的用自帶的icon來做演示                       // 獲取WindowManager                       windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);                       // 設(shè)置LayoutParams(全局變量)相關(guān)參數(shù)                       windowManagerParams = ((MiGuApplication) getApplication()).getWindowParams();                       windowManagerParams.type = WindowManager.LayoutParams.TYPE_PHONE; // 設(shè)置window type                       windowManagerParams.format = PixelFormat.RGBA_8888; // 設(shè)置圖片格式,效果為背景透明                       // 設(shè)置Window flag                       windowManagerParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL                           | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;                      /*                      * 注意,flag的值可以為:                      * LayoutParams.FLAG_NOT_TOUCH_MODAL 不影響后面的事件                      * LayoutParams.FLAG_NOT_FOCUSABLE 不可聚焦                      * LayoutParams.FLAG_NOT_TOUCHABLE 不可觸摸                      */                       // 調(diào)整懸浮窗口至左上角,便于調(diào)整坐標(biāo)                       windowManagerParams.gravity = Gravity.LEFT | Gravity.TOP;                       // 以屏幕左上角為原點,設(shè)置x、y初始值                       DisplayMetrics dm = new DisplayMetrics();                       getWindowManager().getDefaultDisplay().getMetrics(dm);                       int screenWidth = dm.widthPixels;                       int screenHeigh = dm.heightPixels;                       int x = screenWidth - SystemTools.dip2px(MainActivity.this, 100);                       int y= screenHeigh - SystemTools.dip2px(MainActivity.this, 200);                       windowManagerParams.x = x;                       windowManagerParams.y = y;                       // 設(shè)置懸浮窗口長寬數(shù)據(jù)                       windowManagerParams.width = width;//設(shè)置窗口的寬度為圖片大小                       windowManagerParams.height =height;//設(shè)置窗口的高度為圖片大小//                       windowManagerParams.width = WindowManager.LayoutParams.WRAP_CONTENT;//                       windowManagerParams.height =WindowManager.LayoutParams.WRAP_CONTENT;                       // 顯示myFloatView圖像                       windowManager.addView(floatView, windowManagerParams);                       return;                     }                   }                 }                 @Override                 public void failure(RetrofitError error) {//網(wǎng)絡(luò)請求數(shù)據(jù)失敗                  LOGE(error.getMessage());                 }               });  }  public void onClick(View v) {//圖片的點擊事件    Intent intent = new Intent(MainActivity.this, ActivitiesDetails.class);    startActivity(intent);  }

圖片控件:

public class FloatView extends SimpleDraweeView {  private float mTouchX;  private float mTouchY;  private float x;  private float y;  private float mStartX;  private float mStartY;  private OnClickListener mClickListener;  private WindowManager windowManager = (WindowManager) getContext()      .getApplicationContext().getSystemService(Context.WINDOW_SERVICE);  // 此windowManagerParams變量為獲取的全局變量,用以保存懸浮窗口的屬性  private WindowManager.LayoutParams windowManagerParams = ((MiGuApplication) getContext()      .getApplicationContext()).getWindowParams();  public FloatView(Context context) {    super(context);  }  public FloatView(Context context, AttributeSet attrs) {    super(context, attrs);  }  private long curtime=0;  @Override  public boolean onTouchEvent(MotionEvent event) {//獲取到狀態(tài)欄的高度    Rect frame = new Rect();    getWindowVisibleDisplayFrame(frame);    int statusBarHeight = frame.top;    System.out.println("statusBarHeight:"+statusBarHeight);// 獲取相對屏幕的坐標(biāo),即以屏幕左上角為原點    x = event.getRawX();    y = event.getRawY() - statusBarHeight; // statusBarHeight是系統(tǒng)狀態(tài)欄的高度    switch (event.getAction()) {      case MotionEvent.ACTION_DOWN: // 捕獲手指觸摸按下動作// 獲取相對View的坐標(biāo),即以此View左上角為原點        mTouchX = event.getX();        mTouchY = event.getY();        mStartX = x;        mStartY = y;        break;      case MotionEvent.ACTION_MOVE: // 捕獲手指觸摸移動動作        updateViewPosition();        curtime=System.currentTimeMillis();        break;      case MotionEvent.ACTION_UP: // 捕獲手指觸摸離開動作//        if(System.currentTimeMillis()-curtime>100){//          break;//        }        updateViewPosition();        mTouchX = mTouchY = 0;        if (Math.abs(x - mStartX) < 5 && Math.abs(y - mStartY) < 5) {//輕微拖動算點擊          if(mClickListener!=null) {            mClickListener.onClick(this);          }        }        break;    }    return true;  }  @Override  public void setOnClickListener(OnClickListener l) {    this.mClickListener = l;  }  private void updateViewPosition() {// 更新浮動窗口位置參數(shù)    windowManagerParams.x = (int) (x - mTouchX);    windowManagerParams.y = (int) (y - mTouchY);    windowManager.updateViewLayout(this, windowManagerParams); // 刷新顯示  }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 治多县| 报价| 慈利县| 西和县| 宜春市| 南城县| 墨玉县| 芜湖市| 鲁甸县| SHOW| 安义县| 明星| 聂拉木县| 神池县| 托克托县| 安徽省| 枞阳县| 枣强县| 宜良县| 湖口县| 高雄市| 仁寿县| 丰城市| 黄平县| 稷山县| 松江区| 霍山县| 吉安市| 蕉岭县| 孟连| 丽江市| 米脂县| 根河市| 正蓝旗| 开阳县| 屏东市| 隆安县| 白山市| 白玉县| 通辽市| 大连市|