91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何實現懸浮可拖拽的Button

發布時間:2021-09-27 11:20:54 來源:億速云 閱讀:149 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Android如何實現懸浮可拖拽的Button的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

簡介

最近,因為項目需要,需要制作一個界面上可拖拽的按鈕,網上也有多實例,看了下大部分都是示例不全或講解不清晰,效果圖也不明顯,借此自己記錄一番自己的實現方案,以備不時之需,同時也為廣大學者可以直接通過拷貝方式完成項目所需。

核心代碼實現

1DraggingButton 實現

public class DraggingButton extends android.support.v7.widget.AppCompatButton {   private int lastX = 0;  private int lastY = 0;  private int beginX = 0;  private int beginY = 0;   private int screenWidth = 720;  private int screenHeight = 1280;    public DraggingButton(Context context) {    this(context, null);  }   public DraggingButton(Context context, @Nullable AttributeSet attrs) {    this(context, attrs, 0);  }   public DraggingButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);     initData(context);  }   private void initData(Context context){    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);    DisplayMetrics dm = new DisplayMetrics();    wm.getDefaultDisplay().getMetrics(dm);    screenWidth = dm.widthPixels;    screenHeight = dm.heightPixels;  }   @Override  public boolean onTouchEvent(MotionEvent event)  {     switch (event.getAction())    {      case MotionEvent.ACTION_DOWN:        lastX = (int) event.getRawX();   // 觸摸點與屏幕左邊的距離        lastY = (int) event.getRawY();   // 觸摸點與屏幕上邊的距離        beginX = lastX;        beginY = lastY;        break;      case MotionEvent.ACTION_MOVE:         int dx =(int)event.getRawX() - lastX;    // x軸拖動的絕對距離        int dy =(int)event.getRawY() - lastY;    // y軸拖動的絕對距離         // getLeft(): 子View的左邊界到父View的左邊界的距離, getRight():子View的右邊界到父View的左邊界的距離        // 如下幾個數據表示view應該在布局中的位置        int left = getLeft() + dx;        int top = getTop() + dy;        int right = getRight() + dx;        int bottom = getBottom() + dy;        if(left < 0){          left = 0;          right = left + getWidth();        }        if(right > screenWidth){          right = screenWidth;          left = right - getWidth();        }        if(top < 0){          top = 0;          bottom = top + getHeight();        }        if(bottom>screenHeight){          bottom = screenHeight;          top = bottom - getHeight();        }        layout(left, top, right, bottom);        lastX = (int) event.getRawX();        lastY = (int) event.getRawY();        break;      case MotionEvent.ACTION_UP:        // 解決拖拽的時候松手點擊事件觸發        if (Math.abs(lastX - beginX) < 10 && Math.abs(lastY - beginY) < 10){          return super.onTouchEvent(event);        }else{          setPressed(false);          return true;        }      default:        break;    }    return super.onTouchEvent(event);  }}

核心代碼已經奉獻,通過自定義的DraggingButton即可實現可拖拽功能,具體原理主要在于onTouchEvent和layout兩個函數的使用,具體細節不在講述,代碼注釋比較清晰。

舉個栗子

activity中的布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical">  <com.android.study.example.uidemo.dragging.DraggingButton    android:id="@+id/tv_dragging"    android:layout_width="80dp"    android:layout_height="80dp"    android:gravity="center"    android:background="@drawable/drag_button_bg"    android:layout_margin="20dp"    android:padding="10dp"    android:text="懸浮\n按鈕1"    android:textSize="15sp"    android:layout_gravity="right"    android:textColor="#ffffff"/></LinearLayout>

樣式 drag_button_bg.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">  <item android:state_pressed="true">    <shape android:shape="oval">      <!--填充顏色-->      <solid android:color="#bf39b500" />      <!--描邊-->      <stroke android:width="2dp" android:color="#bf39b500" />    </shape>  </item>  <item>    <shape android:shape="oval">      <!--填充顏色-->      <solid android:color="#ff8bc34a" />      <!--描邊-->      <stroke android:width="2dp" android:color="#bf39b500"/>    </shape>  </item></selector>

activity 中的代碼

private DraggingButton mDraggintView;mDraggintView = (DraggingButton) findViewById(R.id.tv_dragging);  mDraggintView.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    Toast.makeText(FloatingActionBtnTestActivity.this, "click", Toast.LENGTH_SHORT).show();   }  });

感謝各位的閱讀!關于“Android如何實現懸浮可拖拽的Button”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红原县| 嘉义县| 宁乡县| 德庆县| 环江| 晴隆县| 华亭县| 增城市| 大方县| 花垣县| 大洼县| 陆良县| 资讯| 三台县| 嘉义县| 桐城市| 广饶县| 五家渠市| 松溪县| 东兴市| 宁晋县| 恩平市| 长顺县| 揭东县| 佛坪县| 砚山县| 临湘市| 德保县| 海盐县| 陈巴尔虎旗| 桃园市| 建瓯市| 砚山县| 旌德县| 麦盖提县| 兴业县| 锦屏县| 阿巴嘎旗| 红桥区| 渭南市| 望奎县|