android_背景大图滚动播放

这篇博客主要介绍了在Android中如何实现背景大图从左往右的滚动播放效果。首先,设置图片居中显示且不进行缩放,通过计算像素值来控制滚动。在滚动过程中,通过判断状态来决定是向右还是向左移动图片,从而达到无缝循环滚动的效果。

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

想要做的效果是从左往右滚动播放效果图暂时没有 以后补上

第一步设置图片居中显示不做缩放 代码如下

<ImageView
            android:id="@+id/start_up_bg"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:src="@drawable/start_up_bg"
            android:scaleType="center"/>

第二步按照图片的高度和手机屏幕的高度比将图片缩放到一定的比例 这样能保证图片的竖直方向上可以显示完全水平方向则可以通过接下来的水平滚动来显示

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.start_up_bg);
        int height = bitmap.getHeight();
        int width = bitmap.getWidth();
        int wantHeight = getResources().getDisplayMetrics().heightPixels;
        int screenWidth = getResources().getDisplayMetrics().widthPixels;
        float scaleY = ((float)wantHeight)/height;
        Matrix matrix = new Matrix();
        matrix.postScale(scaleY, scaleY);
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
第三步 计算图片最左侧有多少个像素未显示在屏幕上 然后让控件滚动到该位置 由于图片是居中显示所以是左右未显示部分是一样大小的

计算出的像素值limitDisX将在接下来被用到

scrollView.setImageBitmap(resizedBitmap);
        limitDisX = (resizedBitmap.getWidth() - screenWidth)/2;
        scrollView.scrollTo(-limitDisX, 0);
第四步 利用android的Handler机制 没过10ms进行一个scroll 当到达右侧边缘时 往反方向运动 到达左侧边缘时同理

isScrollToRight为true时应该向右不断移动 当到达边缘时改变其状态 此时为false 则 应不断向左移动

//左右两边最大的滚动范围
    int limitDisX = 0;
    //判断是否是往右移动
    boolean isScrollToRight = false;
    //记录当前滚动的位置
    int curX = 0;
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            if (isScrollToRight) {
                if(curX <= -limitDisX) {
                    isScrollToRight = false;
                    curX = -limitDisX;
                } else {
                    curX--;
                    scrollView.scrollTo(curX, 0);
                }
            } else {
                if(curX >= limitDisX) {
                    isScrollToRight = true;
                    curX = limitDisX;
                } else {
                    curX ++;
                    scrollView.scrollTo(curX, 0);
                }
            }
            handler.sendEmptyMessageDelayed(0, 10);
        }
    };

效果图以后补上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值