国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Android 自定義LineLayout實(shí)現(xiàn)滿屏任意拖動(dòng)功能的示例代碼

瀏覽:60日期:2022-09-23 17:40:47

1.前言

在開發(fā)中,會(huì)有需求實(shí)現(xiàn)控件在屏幕隨意拖動(dòng),這就需要自定義View,然后在OnTouchEvent事件中,處理MotionEvent.ACTION_MOVE事件,然后通過坐標(biāo)點(diǎn)傳值給onlayout方法,來實(shí)現(xiàn)控件的任意拖動(dòng),具體代碼如下:

import android.content.Context;import android.util.AttributeSet;import android.view.Display;import android.view.MotionEvent;import android.view.WindowManager;import android.widget.LinearLayout;public class DragLineLayout extends LinearLayout { private int mWidth; private int mHeight; private int mScreenWidth; private int mScreenHeight; private Context mContext; private onLocationListener mLocationListener;/*listen to the Rect */ //是否拖動(dòng) private boolean isDrag = false; public boolean isDrag() { return isDrag; } public DragView(Context context, AttributeSet attrs) { super(context, attrs); this.mContext = context; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mWidth = getMeasuredWidth(); mHeight = getMeasuredHeight(); mScreenWidth = getScreenWidth(mContext); mScreenHeight = getScreenHeight(mContext) - getStatusBarHeight(); } public int getStatusBarHeight() { int resourceId = mContext.getResources().getIdentifier('status_bar_height', 'dimen', 'android'); return mContext.getResources().getDimensionPixelSize(resourceId); } public int getScreenWidth(Context context) { WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getWidth(); } public int getScreenHeight(Context context) { WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getHeight(); } private float mDownX; private float mDownY; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); if (this.isEnabled()) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: isDrag = false; mDownX = event.getX(); mDownY = event.getY(); break; case MotionEvent.ACTION_MOVE: final float mXdistance = event.getX() - mDownX; final float mYdistance = event.getY() - mDownY; int l, r, t, b; //當(dāng)水平或者垂直滑動(dòng)距離大于10,才算是拖動(dòng)事件 if (Math.abs(mXdistance) > 10 || Math.abs(mYdistance) > 10) { isDrag = true; l = (int) (getLeft() + mXdistance); r = l + mWidth; t = (int) (getTop() + mYdistance); b = t + mHeight; //邊界判斷,不讓布局滑出界面 if (l < 0) { l = 0; r = l + mWidth; } else if (r > mScreenWidth) { r = mScreenWidth; l = r - mWidth; } if (t < 0) { t = 0; b = t + mHeight; } else if (b > mScreenHeight) { b = mScreenHeight; t = b - mHeight; } //回調(diào)移動(dòng)后的坐標(biāo)點(diǎn) if(mLocationListener!=null){ mLocationListener.locationRect((l+r)/2,(t+b)/2); } this.layout(l, t, r, b); } break; case MotionEvent.ACTION_UP: setPressed(false); break; case MotionEvent.ACTION_CANCEL: setPressed(false); break; } return true; } return false; } public void setLocationListener(onLocationListener LocationListener) { this.mLocationListener = LocationListener; } public interface onLocationListener { void locationRect(float locationX, float locationY); }}

2.在代碼中的運(yùn)用

<com.xinrui.guestservice.view.DragLineLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='@dimen/dp_200' android:layout_height='@dimen/dp_110' android:orientation='vertical'> <RelativeLayout android:layout_width='match_parent' android:layout_height='@dimen/dp_50'> <EditText android: android:layout_width='match_parent' android:layout_height='@dimen/dp_50' android:background='@drawable/edit_bg' /> </RelativeLayout> <RelativeLayout android:layout_width='match_parent' android:layout_height='@dimen/dp_55' android:layout_marginTop='@dimen/margin_5' android:background='@drawable/paint_bg'> <TextView android: android:layout_width='@dimen/dp_50' android:layout_height='@dimen/dp_50' android:layout_alignParentLeft='true' android:layout_alignParentTop='true' android:layout_marginTop='@dimen/margin_5' android:background='@drawable/main_selector_write' android:clickable='true' /> <TextView android: android:layout_width='@dimen/dp_50' android:layout_height='@dimen/dp_50' android:layout_alignParentTop='true' android:layout_marginLeft='@dimen/dp_10' android:layout_marginTop='@dimen/margin_5' android:layout_toRightOf='@id/paint_typeface' android:background='@drawable/main_selector_write' android:clickable='true' /> </RelativeLayout></com.xinrui.guestservice.view.DragLineLayout>

3.這樣就可以在Activity 加載這個(gè)xml 來實(shí)現(xiàn)任意拖動(dòng)功能

總結(jié)

到此這篇關(guān)于Android 自定義LineLayout實(shí)現(xiàn)滿屏任意拖動(dòng)功能的示例代碼的文章就介紹到這了,更多相關(guān)Android 自定義LineLayout實(shí)現(xiàn)滿屏任意拖動(dòng)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 视频偷拍一级视频在线观看 | a一级毛片免费高清在线 | 九九香蕉视频 | 另类专区另类专区亚洲 | 国产一区二区fc2ppv在线播放 | 亚洲黄色免费网址 | 久久久国产99久久国产首页 | 亚洲欧美日韩国产精品一区 | 成人影院在线免费观看 | 久久久久久网站 | 欧洲一级鲁丝片免费 | 欧美一级高清免费播放 | 国产成人精品曰本亚洲78 | 狠狠色丁香婷婷综合 | 五月色婷婷琪琪综合伊人 | 普通话对白国产情侣自啪 | 亚洲综合网在线观看 | 国产精品久久久久久久专区 | 精品真实国产乱文在线 | 国产一区影视 | 欧美一级片网 | 亚洲免费网 | 免费国产高清精品一区在线 | 美国毛片免费一级 | 成人99国产精品 | 黄色三级网址 | 99精品视频在线视频免费观看 | 国产日韩亚洲不卡高清在线观看 | 一级美国片免费看 | 亚洲一区二区三区在线 | 一级毛片免费在线观看网站 | 精品亚洲综合久久中文字幕 | 亚州不卡 | 日韩免费一区二区三区在线 | 精品一区二区三区18 | 欧美高清性色生活 | 99久久精品6在线播放 | 亚洲综合图片人成综合网 | 搞黄网站在线观看 | 亚洲综合色在线观看 | shkd在线观看|