之前有看到有关直接调用桌面的壁纸
不过要求系统最低为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
分享到:
相关推荐
在Android开发中,View和ViewGroup是构建用户界面的基础组件,它们共同负责UI的绘制和交互。这篇博客将深入探讨这两个关键概念,以及手势监听的相关顺序和应用。 首先,我们来理解View。在Android中,View是所有UI...
2. 在这个类中,我们需要重写`onDraw()`方法来绘制背景图片。我们可以利用`Canvas`对象,通过`drawBitmap()`方法绘制指定的背景图片。 3. 添加ProgressBar到布局。这可以通过在XML布局文件中定义一个ProgressBar,...
4. **onDraw()**:尽管`ViewGroup`通常不直接绘制内容,但在某些情况下,如背景或者特殊边框,可能需要重写`onDraw()`进行绘制。这里可以使用`Canvas`对象进行绘图操作。 5. **onTouchEvent()**:`ViewGroup`负责...
我们将基于标题“自定义ViewGroup 显示一个TextView到ViewGroup”以及描述“自定义ViewGroup学习 最简单的模式,显示一个TextView到自定义ViewGroup中”进行讲解。 首先,理解ViewGroup的基本概念。ViewGroup是...
为了实现这一功能,我们需要创建一个自定义的ViewGroup类,扩展自ViewGroup或者LinearLayout,并在其中覆盖onDraw()方法来绘制带有圆角的背景。 首先,我们需要创建一个新的Java类,继承自ViewGroup。在这个类中,...
每个Activity都有一个视图层次结构,这个层次结构由View和 ViewGroup组成,它们共同决定了界面的布局和显示。要动态改变Activity的背景,我们实际上是在修改根布局或者Activity窗口的背景。 在源码实现过程中,有几...
在Android开发中,实现类似小红书登录页面的背景图无限滚动效果,是一种常见的视觉增强技术,能够给用户带来更加沉浸式的体验。这种效果通常通过组合使用ViewPager、RecyclerView或者自定义ViewGroup来实现。以下是...
`ViewGroup` 是Android中所有视图容器的基类,它可以包含多个子视图,并负责管理这些子视图的布局和交互。在这个场景中,我们将讨论如何使用`HorizontalScrollView`结合`ViewGroup`来创建一个可以横向滑动查看多张...
该系统基于自定义ViewGroup,利用Canvas进行图形绘制,实现了五代的家族关系展示,包括自身、配偶、父母、祖父母、子女及其配偶等。系统支持触控操作,便于移动查看家谱。代码结构相对固定,适用于家谱展示场景,并...
`ViewGroup`负责管理这些子`View`的布局和绘制,因此,如果我们想要实现`ViewPager`的效果,我们需要创建一个自定义的`ViewGroup`来承载我们的页面内容。 在自定义`ViewGroup`时,主要需要关注以下几个关键点: 1....
4. **视图树遍历(View Tree Traversal)**: `ViewGroup`在事件分发和绘制过程中,需要遍历其子树,通过`dispatchDraw()`和`dispatchTouchEvent()`等方法。 5. **性能优化(Performance Optimization)`: `...
我们将详细讲解自定义ViewGroup的过程,包括布局设计、测量、布局和绘制,以及如何处理触摸事件。 首先,创建一个新的Java类,继承自ViewGroup。这个类将作为我们自定义ViewGroup的基础: ```java public class ...
3. onDraw():通常自定义ViewGroup不需要重写此方法,因为它的主要任务是安排和管理Child View,而不是直接绘制内容。然而,某些情况下,如CoordinatorLayout,可能需要自定义绘制逻辑。 现在,我们通过一个例子来...
3. **onDraw()**: 虽然在自定义ViewGroup时,通常不直接绘制内容,但如果你的ViewGroup需要自己的视觉元素,你需要重写此方法。通常,ViewGroup的绘图工作主要由其子视图完成。 4. **addView()**: 添加子视图到...
它本身并不在屏幕上绘制任何内容,但可以通过添加背景来展示视觉效果。 2. 布局管理:ViewGroup提供了多种内置布局管理器,如LinearLayout、RelativeLayout和FrameLayout等,它们决定了子视图在屏幕上的排列方式。...
本示例中,我们关注的是如何自定义绘制一个五边形雷达图,类似于芝麻信用分数展示的方式。雷达图通常用于多维度数据的可视化,每个轴代表一个特征或指标,数据点则位于这些轴的交点,通过连线形成一个或多边形。下面...
2. **自定义ViewGroup**:为了实现背景图的拉伸和缩放,我们需要创建一个自定义的ViewGroup,例如ZoomableFrameLayout。在这个自定义布局中,我们将背景图片作为子View,并在滑动手势处理中改变其ScaleX和ScaleY属性...
onMeasure()用于测量子视图的大小,onLayout()确定子视图的位置,onDraw()绘制ViewGroup自身的背景和边框。 2. **测量子视图**:在onMeasure()中,通过调用measure()方法为每个子视图设定合适的尺寸。MeasureSpec是...
这些控件默认有自己的绘制逻辑,但可以通过自定义背景(background)或者重写onDraw()方法来改变它们的外观。 2. 通过设置属性,我们可以改变控件的颜色、形状、文字样式等。例如,使用XML布局文件或编程方式设置...