【Android】炫酷ui 带你做一个背景跟着滚动的工具

本文介绍了如何在Android中使用ViewPager2配合Fragment,实现背景图片随着ViewPager滑动而动态偏移的效果。主要涉及ImageScroller工具类的创建,用于计算和设置图片偏移,并通过BindUtils绑定ViewPager2的滑动事件,动态调整ImageScroller的滑动模式。最终实现了一个平滑的背景图片滚动效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在用ViewPager配合Fragment开发的模式中,想做一个类似于桌面壁纸的背景图,可以跟着ViewPager滑动。这里贴一下项目初期实现了的效果:

 可以看到,界面中ViewPager滑动的同时背景图片也跟着滑动了,二者的滑动速率不一样。那么来

 大体思路:

                在ViewPager滑动的过程中,监听滑动百分比,再通过这个滑动的百分比来控制背景图的偏移,背景图的偏移通过背景图的尺寸和View容器的尺寸来计算。最后将这个偏移后的图片显示在ImageView或者某个View的Drawable上。(其实SurfaceView的性能会强得多,但是SurfaceView没有View属性,而且放在布局中还会让其他View的显示出现一些问题,特别是有半透明,阴影这些地方)

        那么接下来就开始吧,首先准备好一张背景图片,一个ViewPager,作者用的是VIewPager2。

        这里先放一个简单的一个ViewPager2。

ViewPagerAdapter.java


import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.jetbrains.annotations.NotNull;

/**
 * @author ldh
 * 时间: 2021/10/23 13:51
 * 邮箱: 2637614077@qq.com
 */
public class ViewPagerAdapter extends RecyclerView.Adapter<ViewPagerAdapter.MyViewHolder> {

    int maxCount = 0;

    public ViewPagerAdapter(int maxCount){
        this.maxCount = maxCount;
    }

    @NonNull
    @NotNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_viewpager, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull @NotNull MyViewHolder holder, int position) {
        holder.textView.setText("这是第" + (position + 1) + "页");
    }

    @Override
    public int getItemCount() {
        return maxCount;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public MyViewHolder(@NonNull @NotNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.item_viewpager_textview);
        }
    }
}

MainActivity.kt

val viewpager2 = findViewById<ViewPager2>(R.id.viewpager2)
viewpager2.adapter = ViewPagerAdapter(4)

现在是这个效果,此时只是简单的完成了一个ViewPager。

 

 然后我们写一个工具类,用偏移比率来描述偏移量。

偏移比率:[0,1]之间,初始为0,0表示还没开始划,1就是已经划完了。因为图片的尺寸和view的尺寸是可能会随着需求动态变化的,所以只记录偏移的比例。

ImageScroller.kt

import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Matrix
i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hesley263

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值