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);

}


详见附件图片。
  • viewGroup 绘制任一背景图公式_第1张图片
  • 大小: 458 KB
  • 查看图片附件

你可能感兴趣的:(canvas,viewgroup,壁纸,绘制,背景)