public class PointPageView extends View {
private int mPageSize;
private int mPageIndex;
private int mPointSize;
private int mPointSpan;
private int mSelectPointSize;
private int mStep;
private int mDisplaySize;
private int mDisplayIndex;
private Paint paint;
private void init() {
mPointSize = 3;
mSelectPointSize = mPointSize;
mPointSpan = 3 * mPointSize;
mStep = 1;
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
}
public PointPageView(Context context) {
super(context, null);
init();
}
/**
* Used to inflate the Workspace from XML.
*/
public PointPageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void setPageSize(int pageSize) {
mPageSize = Math.max(pageSize, 0);
mDisplaySize = (int)Math.ceil((double)mPageSize / mStep);
invalidate();
}
public int getPageSize() {
return mPageSize;
}
public void setPageIndex(int pageIndex) {
mPageIndex = Math.min(Math.max(pageIndex, 0), mPageSize - 1);
mDisplayIndex = (int)Math.floor((double)mPageIndex / mStep);
invalidate();
}
public int getPageIndex() {
return mPageIndex;
}
public void setColor(int color) {
paint.setColor(color);
}
public void setPointSize(int size) {
mPointSize = size;
}
public void setSelectPointSize(int size) {
mSelectPointSize = size;
}
public void setPointSpan(int span) {
mPointSpan = span;
}
public void setStep(int step) {
mStep = step;
}
public int getStep() {
return mStep;
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
drawAllPoint(canvas);
}
private void drawAllPoint(Canvas canvas) {
canvas.save();
final int paddingLeft = mPointSpan;
final int width = getMeasuredWidth();
final int height = getMeasuredHeight();
int radius = mPointSize;
int contentWidth = (radius + paddingLeft) * mPageSize;
int beginX = (width - contentWidth) / 2;
int beginY = height / 2;
for (int i = 0; i < mDisplaySize; i++) {
if (i == mDisplayIndex) {
paint.setAlpha(255);
radius = mSelectPointSize;
} else {
paint.setAlpha(128);
radius = mPointSize;
}
canvas.drawCircle(beginX, beginY, radius, paint);
beginX = beginX + radius + radius + paddingLeft;
}
canvas.restore();
}
}
分享到:
相关推荐
在Android开发中,ListView是一种常见的列表控件,用于展示大量数据。然而,有时我们需要在每个列表项中展示更丰富的信息,这时可以使用ListView嵌套ViewPager的布局方式。这个设计允许用户在每个ListView条目内滑动...
-- 小圆点的父控件 --> android:id="@+id/ll_dot_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation=...
`ViewPager`是Android SDK中的一个控件,它可以显示多个页面并支持用户通过手势左右滑动来切换页面。在布局文件中,我们需要添加`ViewPager`标签,并配置相应的适配器来填充页面内容。 ```xml <androidx.viewpager....
ViewPager是Android Support Library中的一个控件,它允许用户通过水平滑动来浏览多个页面。每个页面都是一个可以单独显示的View或者Fragment。ViewPager会自动处理页面的滚动和平移效果,为用户提供流畅的交互体验...
ViewPager是Android SDK中的一个控件,属于android.support.v4库,它允许用户通过手势左右滑动来浏览多个子页面。这些子页面通常由Fragment或PagerAdapter提供的View实例组成,这样可以方便地实现页面间的切换和数据...
TabLayout与ViewPager结合使用可以创建底部导航栏,而指示点通常是一系列小圆点,当前页面对应的小圆点会被高亮。 在"androidDemoviewPager"项目中,你可以找到上述步骤的具体实现,包括布局文件、适配器类以及主...
ViewPager是Android SDK中的一个强大控件,常用于实现页面滑动效果,比如在启动应用时展示的教程或功能介绍。在Android开发中,用户引导通常用于向新用户介绍应用程序的关键功能,以提高用户体验。 首先,我们来...
- UIPageControl是苹果iOS SDK中的一个控件,它提供了一组小圆点,用于指示当前显示的页面以及总的页面数量。每个小圆点代表一个页面,当前页面的小圆点会高亮显示。 - 使用UIPageControl时,通常配合UIScrollView...
**页面指示器(Page Indicator)**:为了给用户提供当前位置的视觉反馈,开发者常常会在ViewPager下方添加一个页面指示器,如小圆点或数字,`TabLayout`本身就可以作为简单的页面指示器,也可以自定义指示器控件。...
3. UIPageControl:这是一个小圆点组成的控件,通常位于ScrollView底部,用来指示当前页面和总页面数。当ScrollView滚动时,可以通过代理方法更新PageControl的当前页面。 四、实现步骤 4. 创建ScrollView:首先,...
这是一个简单的控件,显示为一系列小圆点,代表可滚动的内容页数。 8. **Gestures and Interactions**: 响应用户的轻扫、捏合等手势,可以增强交互体验。例如,添加UISwipeGestureRecognizer可以让用户通过左右滑动...
3. **页面指示器(Page Indicator)**:为了让用户知道当前显示的是哪个页面,可以添加一个页面指示器,如`CircleIndicator`,它可以显示小圆点,当前页面对应的圆点会被高亮。 4. **轮播功能**:要实现自动轮播,...
6. **Page Control**:为了提供视觉反馈,ISViewPager可能还包含一个UIPageControl,它是一排小圆点,代表可滑动的页面数量,当前页面则突出显示。 7. **性能优化**:由于可能包含多个视图控制器,ISViewPager需要...
1. Stack:作为根布局,Stack允许我们在一个层叠的结构中放置多个子Widget,可以覆盖或堆叠在彼此之上。 2. PageView:类似于Android中的ViewPager,PageView用于创建一个可以滑动的页面容器,用户可以左右滑动浏览...