viewGroup 绘制任一背景图公式

之前有看到有关直接调用桌面的壁纸
不过要求系统最低为2.1
为了在低版本使用,就只能自己绘制图片。
如下为绘制的关键部分。

@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
float left = 0;
if (getChildCount() !=0) {
final int curLeft=getScrollX();//屏幕左侧位置
final int curCount=getChildCount();//当前总页面
final float bmWidth=mBitmap.getWidth();//壁纸宽度
//根据定制的不同view这边总长度参数不一样
final float totalWidth=getWidth()*curCount;
final float lastScrLeft=totalWidth-getWidth();
final float lastWalLeft=totalWidth-bmWidth;
left=lastWalLeft/lastScrLeft*curLeft;//计算公式
}
//当有滑动等事件可引起背景图片的相应位置改变
canvas.drawBitmap(mBitmap, left, 0, null);
super.draw(canvas);

}


上面的方法是从第1页开始,如果在第一页左移则会看到最底部。
为避免这情况我们在计算时前后多算一页就行了。
对应的方法为:

@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
float left = 0;
if (getChildCount() !=0) {
final int curLeft=getScrollX();//屏幕左侧位置
final int curCount=getChildCount();//当前总页面
final float bmWidth=mBitmap.getWidth();//壁纸宽度
//根据定制的不同view这边总长度参数不一样,这边在前后各加一页
final float totalWidth=getWidth()*(curCount+2);
final float lastScrLeft=totalWidth-2*getWidth();
final float lastWalLeft=totalWidth-bmWidth;
left=lastWalLeft/lastScrLeft*(curLeft-getWidth());//计算公式
}
//当有滑动等事件可引起背景图片的相应位置改变
canvas.drawBitmap(mBitmap, left, 0, null);
super.draw(canvas);

}


详见附件图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值