直播电商软件开发,界面悬浮购物车显示隐藏
直播电商软件开发,界面悬浮购物车显示隐藏实现的相关代码
布局
1 | <?xml version= "1.0" encoding= "utf-8" ?><br><RelativeLayout<br> xmlns:android= "http://schemas.android.com/apk/res/android" <br> xmlns:tools= "http://schemas.android.com/tools" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" <br> tools:context= ".MainActivity" ><br> <ListView<br> android:id= "@+id/list_view" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" /><br> <ImageView<br> android:id= "@+id/iv_cart" <br> android:layout_width= "50dp" <br> android:layout_height= "50dp" <br> android:layout_alignParentBottom= "true" <br> android:layout_alignParentEnd= "true" <br> android:layout_alignParentRight= "true" <br> android:layout_marginBottom= "60dp" <br> android:layout_marginEnd= "20dp" <br> android:layout_marginRight= "20dp" <br> android:contentDescription= "@null" <br> android:src= "@drawable/ic_cart" /><br></RelativeLayout> |
代码
初始化控件
1 | mListView = findViewById(R.id.list_view);<br> mIvCart = findViewById(R.id.iv_cart); |
初始化数据
1 | for ( int i = 0 ; i < 50 ; i++) {<br> titles.add( "第 - " + i + " - 条数据" );<br> }<br> mListView.setAdapter( new ArrayAdapter<>( this , android.R.layout.simple_list_item_1, titles)); |
计算移动距离
1 | //控件绘制完成之后再获取其宽高<br> mIvCart.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {<br> @Override<br> public void onGlobalLayout() {<br> //动画移动的距离 屏幕的宽度减去图片距左边的宽度 就是图片距右边的宽度,再加上隐藏的一半<br> moveDistance = getScreenWidth() - mIvCart.getRight() + mIvCart.getWidth() / 2;<br> //监听结束之后移除监听事件<br> mIvCart.getViewTreeObserver().removeOnGlobalLayoutListener(this);<br> }<br> });<br> private int getScreenWidth() {<br> DisplayMetrics dm = new DisplayMetrics();<br> this.getWindowManager().getDefaultDisplay().getMetrics(dm);<br> return dm.widthPixels;<br> } |
隐藏动画
1 | private void hideFloatImage( int distance) {<br> isShowFloatImage = false ;<br> //位移动画<br> TranslateAnimation ta = new TranslateAnimation(0, distance, 0, 0);<br> ta.setDuration(300);<br> //渐变动画<br> AlphaAnimation al = new AlphaAnimation(1f, 0.5f);<br> al.setDuration(300);<br> AnimationSet set = new AnimationSet(true);<br> //动画完成后不回到原位<br> set.setFillAfter(true);<br> set.addAnimation(ta);<br> set.addAnimation(al);<br> mIvCart.startAnimation(set);<br> } |
显示动画
1 | private void showFloatImage( int distance) {<br> isShowFloatImage = true ;<br> //位移动画<br> TranslateAnimation ta = new TranslateAnimation(distance, 0, 0, 0);<br> ta.setDuration(300);<br> //渐变动画<br> AlphaAnimation al = new AlphaAnimation(0.5f, 1f);<br> al.setDuration(300);<br> AnimationSet set = new AnimationSet(true);<br> //动画完成后不回到原位<br> set.setFillAfter(true);<br> set.addAnimation(ta);<br> set.addAnimation(al);<br> mIvCart.startAnimation(set);<br> } |
处理滑动逻辑
1 | @Override <br> public boolean dispatchTouchEvent(MotionEvent event) {<br> switch (event.getAction()) {<br> case MotionEvent.ACTION_DOWN: //手指按下<br> if (System.currentTimeMillis() - upTime < 1000) {<br> //本次按下距离上次的抬起小于1s时,取消Timer<br> timer.cancel();<br> }<br> startY = event.getY();<br> break;<br> case MotionEvent.ACTION_MOVE://手指滑动<br> if (Math.abs(startY - event.getY()) > 10) {<br> if (isShowFloatImage) {<br> hideFloatImage(moveDistance);<br> }<br> }<br> startY = event.getY();<br> break;<br> case MotionEvent.ACTION_UP://手指抬起<br> if (!isShowFloatImage) {<br> //抬起手指1s后再显示悬浮按钮<br> //开始1s倒计时<br> upTime = System.currentTimeMillis();<br> timer = new Timer();<br> timer.schedule(new FloatTask(), 1000);<br> }<br> break;<br> }<br> return super.dispatchTouchEvent(event);<br> } |
以上就是 直播电商软件开发,界面悬浮购物车显示隐藏实现的相关代码,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现