`
hsx9566
  • 浏览: 175484 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

}


详见附件图片。
  • 大小: 458 KB
0
0
分享到:
评论

相关推荐

    Android中的View与ViewGroup绘制过程,手势监听顺序与使用

    在Android开发中,View和ViewGroup是构建用户界面的基础组件,它们共同负责UI的绘制和交互。这篇博客将深入探讨这两个关键概念,以及手势监听的相关顺序和应用。 首先,我们来理解View。在Android中,View是所有UI...

    自定义控件背景图加进度条

    2. 在这个类中,我们需要重写`onDraw()`方法来绘制背景图片。我们可以利用`Canvas`对象,通过`drawBitmap()`方法绘制指定的背景图片。 3. 添加ProgressBar到布局。这可以通过在XML布局文件中定义一个ProgressBar,...

    创建定制的ViewGroup

    4. **onDraw()**:尽管`ViewGroup`通常不直接绘制内容,但在某些情况下,如背景或者特殊边框,可能需要重写`onDraw()`进行绘制。这里可以使用`Canvas`对象进行绘图操作。 5. **onTouchEvent()**:`ViewGroup`负责...

    自定义ViewGroup 显示一个TextView到ViewGroup

    我们将基于标题“自定义ViewGroup 显示一个TextView到ViewGroup”以及描述“自定义ViewGroup学习 最简单的模式,显示一个TextView到自定义ViewGroup中”进行讲解。 首先,理解ViewGroup的基本概念。ViewGroup是...

    Android-可以指定圆角的ViewGroup

    为了实现这一功能,我们需要创建一个自定义的ViewGroup类,扩展自ViewGroup或者LinearLayout,并在其中覆盖onDraw()方法来绘制带有圆角的背景。 首先,我们需要创建一个新的Java类,继承自ViewGroup。在这个类中,...

    Android 动态设置程序activity背景图片源码

    每个Activity都有一个视图层次结构,这个层次结构由View和 ViewGroup组成,它们共同决定了界面的布局和显示。要动态改变Activity的背景,我们实际上是在修改根布局或者Activity窗口的背景。 在源码实现过程中,有几...

    Android 实现小红书登陆页面背景图无限滚动效果

    在Android开发中,实现类似小红书登录页面的背景图无限滚动效果,是一种常见的视觉增强技术,能够给用户带来更加沉浸式的体验。这种效果通常通过组合使用ViewPager、RecyclerView或者自定义ViewGroup来实现。以下是...

    HorizontalScrollView与ViewGroup实现横向滑动查看图片

    `ViewGroup` 是Android中所有视图容器的基类,它可以包含多个子视图,并负责管理这些子视图的布局和交互。在这个场景中,我们将讨论如何使用`HorizontalScrollView`结合`ViewGroup`来创建一个可以横向滑动查看多张...

    基于自定义ViewGroup的FamilyTreeView家谱树绘制Java设计源码

    该系统基于自定义ViewGroup,利用Canvas进行图形绘制,实现了五代的家族关系展示,包括自身、配偶、父母、祖父母、子女及其配偶等。系统支持触控操作,便于移动查看家谱。代码结构相对固定,适用于家谱展示场景,并...

    ViewGroup实现VIewpager的效果

    `ViewGroup`负责管理这些子`View`的布局和绘制,因此,如果我们想要实现`ViewPager`的效果,我们需要创建一个自定义的`ViewGroup`来承载我们的页面内容。 在自定义`ViewGroup`时,主要需要关注以下几个关键点: 1....

    android viewgroup view 源码

    4. **视图树遍历(View Tree Traversal)**: `ViewGroup`在事件分发和绘制过程中,需要遍历其子树,通过`dispatchDraw()`和`dispatchTouchEvent()`等方法。 5. **性能优化(Performance Optimization)`: `...

    自定义ViewGroup 显示两个TextView

    我们将详细讲解自定义ViewGroup的过程,包括布局设计、测量、布局和绘制,以及如何处理触摸事件。 首先,创建一个新的Java类,继承自ViewGroup。这个类将作为我们自定义ViewGroup的基础: ```java public class ...

    Android中使用自定义ViewGroup的总结

    3. onDraw():通常自定义ViewGroup不需要重写此方法,因为它的主要任务是安排和管理Child View,而不是直接绘制内容。然而,某些情况下,如CoordinatorLayout,可能需要自定义绘制逻辑。 现在,我们通过一个例子来...

    Android 手把手教您自定义ViewGroup(一)

    3. **onDraw()**: 虽然在自定义ViewGroup时,通常不直接绘制内容,但如果你的ViewGroup需要自己的视觉元素,你需要重写此方法。通常,ViewGroup的绘图工作主要由其子视图完成。 4. **addView()**: 添加子视图到...

    ViewGroupDemo1

    它本身并不在屏幕上绘制任何内容,但可以通过添加背景来展示视觉效果。 2. 布局管理:ViewGroup提供了多种内置布局管理器,如LinearLayout、RelativeLayout和FrameLayout等,它们决定了子视图在屏幕上的排列方式。...

    自定义绘制五边形雷达图(类似芝麻信用分数)

    本示例中,我们关注的是如何自定义绘制一个五边形雷达图,类似于芝麻信用分数展示的方式。雷达图通常用于多维度数据的可视化,每个轴代表一个特征或指标,数据点则位于这些轴的交点,通过连线形成一个或多边形。下面...

    仿QQ得背景图随手势拉伸而缩放的控件

    2. **自定义ViewGroup**:为了实现背景图的拉伸和缩放,我们需要创建一个自定义的ViewGroup,例如ZoomableFrameLayout。在这个自定义布局中,我们将背景图片作为子View,并在滑动手势处理中改变其ScaleX和ScaleY属性...

    android自定义ViewGroup总结

    onMeasure()用于测量子视图的大小,onLayout()确定子视图的位置,onDraw()绘制ViewGroup自身的背景和边框。 2. **测量子视图**:在onMeasure()中,通过调用measure()方法为每个子视图设定合适的尺寸。MeasureSpec是...

    【Android进阶】(2)2D绘制与控件绘制

    这些控件默认有自己的绘制逻辑,但可以通过自定义背景(background)或者重写onDraw()方法来改变它们的外观。 2. 通过设置属性,我们可以改变控件的颜色、形状、文字样式等。例如,使用XML布局文件或编程方式设置...

Global site tag (gtag.js) - Google Analytics