电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android實現懸浮圖片

瀏覽:6日期:2022-09-22 15:38:37

本文實例為大家分享了Android實現懸浮圖片的具體代碼,供大家參考,具體內容如下

@SuppressLint('AppCompatCustomView')public class MoveImageView extends ImageView { //按下那一刻的坐標和 控件上下左右距離 private float lastX; private float lastY; private int left; private int top; private int right; private int bottom; //如果是拖動事件就不用響應點擊事件 boolean isMove = false; boolean isAnimatoring = false; //屏幕寬高 private int screenWidthPx; private int screenHeightPx; public MoveImageView(Context context) { this(context, null); } public MoveImageView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public MoveImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); screenWidthPx = getScreenWidthPx(getContext()); screenHeightPx = getScreenHeightPx(getContext()); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //動畫執行過程中,不響應一切操作, // 這里相當于不讓其走后面的MotionEvent.ACTION_MOVE:與MotionEvent.ACTION_UP: if (isAnimatoring) { return false; } lastX = event.getRawX(); lastY = event.getRawY(); left = getLeft(); top = getTop(); right = getRight(); bottom = getBottom(); break; case MotionEvent.ACTION_MOVE: isMove = true; float x = event.getRawX(); float y = event.getRawY(); int l = (int) (left + (x - lastX)); int t = (int) (top + (y - lastY)); int r = (int) (right + (x - lastX)); int b = (int) (bottom + (y - lastY)); layout(l, t, r, b); break; case MotionEvent.ACTION_UP: if (isMove) { //如果頂部拖出屏幕外面,回正 if (getTop() < 0) { layout(getLeft(), 0, getRight(), getHeight()); } //getBottom() 獲取到的是 控件底部到父容器頂部的距離,所以需要減去狀態欄的高度 int bottomHeight = screenHeightPx - getStatusBarHeight(getContext()); //如果底部拖出屏幕外面,回正 if (getBottom() > bottomHeight) { layout(getLeft(), bottomHeight-getHeight(), getRight(), bottomHeight); } isMove = false; startAnimation(); return true; } return super.onTouchEvent(event); } return super.onTouchEvent(event); } private void startAnimation() { isAnimatoring = true; //右邊距 int marinRight = DisplayUtils.dpToPx(20); int endValue = screenWidthPx - marinRight; ValueAnimator animator = ValueAnimator.ofInt(getRight(), endValue); animator.setDuration(Math.abs(endValue - getRight()) > 1000 ? 1000 : Math.abs(endValue - getRight())); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int curValue = (int) animation.getAnimatedValue(); layout(curValue - getWidth(), getTop(), curValue, getHeight() + getTop()); } }); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { isAnimatoring = false; animator.removeAllUpdateListeners(); animator.removeAllListeners(); } }); animator.start(); } /** * 獲取狀態欄高度 */ public static int getStatusBarHeight(Context context) { int result = 24; int resId = context.getResources().getIdentifier('status_bar_height', 'dimen', 'android'); if (resId > 0) { result = context.getResources().getDimensionPixelSize(resId); } else { result = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, result, Resources.getSystem().getDisplayMetrics()); } return result; } public static int getScreenWidthPx(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); if (windowManager != null) {// windowManager.getDefaultDisplay().getMetrics(dm); windowManager.getDefaultDisplay().getRealMetrics(dm); return dm.widthPixels; } return 0; } public static int getScreenHeightPx(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); if (windowManager != null) {// windowManager.getDefaultDisplay().getMetrics(dm); windowManager.getDefaultDisplay().getRealMetrics(dm); return dm.heightPixels; } return 0; }}

應用:

布局文件:

<?xml version='1.0' encoding='utf-8'?><RelativeLayout 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' tools:context='.TestActivity'> <com.lingtao.ltvideo.widgets.MoveImageView android:layout_width='50dp' android: android:layout_height='50dp' android:layout_alignParentRight='true' android:layout_alignParentBottom='true' android:layout_marginBottom='100dp' android:layout_marginRight='20dp' android:src='http://www.hdgsjgj.cn/bcjs/9076.html#ff0000' /></RelativeLayout>

Activity:

public class TestActivity extends AppCompatActivity { private MoveImageView moveImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test2); moveImageView = ((MoveImageView) findViewById(R.id.MoveImageView)); moveImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(TestActivity.this, '點擊事件', Toast.LENGTH_SHORT).show(); } }); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 衬氟旋塞阀-卡套旋塞阀-中升阀门首页 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 无锡门窗-系统门窗-阳光房-封阳台-断桥铝门窗厂[窗致美] | 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 硬齿面减速机_厂家-山东安吉富传动设备股份有限公司 | 数字展示在线_数字展示行业门户网站| 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 福建自考_福建自学考试网| 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 广东泵阀展|阀门展-广东国际泵管阀展览会 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 写方案网_方案策划方案模板下载| 阳光1号桔柚_无核沃柑_柑橘新品种枝条苗木批发 - 苧金网 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 |