直播电商软件开发,界面悬浮购物车显示隐藏

直播电商软件开发,界面悬浮购物车显示隐藏实现的相关代码

布局

 

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>    }

 

以上就是 直播电商软件开发,界面悬浮购物车显示隐藏实现的相关代码,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(104)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示