Android自定义View——从零开始实现书籍翻页效果

简单总结一下,a是触摸点,f是触摸点相对的边缘角,eh我们设置为af的垂直平分线,则gaf的中点,abakdj直线曲线cdb是起点为c,控制点为e,终点为b二阶贝塞尔曲线曲线kij是起点为k,控制点为h,终点为j二阶贝塞尔曲线,区域ABC就由这些点和线划分开来。我们将这些点称为标识点,下一步就是模拟设定af点的位置,将这组标识点绘制到屏幕上来验证我们的计算公式是否正确,创建BookPageView

public class BookPageView extends View {
private Paint pointPaint;//绘制各标识点的画笔
private Paint bgPaint;//背景画笔

private MyPoint a,f,g,e,h,c,j,b,k,d,i;

private int defaultWidth;//默认宽度
private int defaultHeight;//默认高度
private int viewWidth;
private int viewHeight;

public BookPageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context,attrs);
}

private void init(Context context, @Nullable AttributeSet attrs){
defaultWidth = 600;
defaultHeight = 1000;

viewWidth = defaultWidth;
viewHeight = defaultHeight;

a = new MyPoint(400,800);
f = new MyPoint(viewWidth,viewHeight);
g = new MyPoint();
e = new MyPoint();
h = new MyPoint();
c = new MyP 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 oint();
j = new MyPoint();
b = new MyPoint();
k = new MyPoint();
d = new MyPoint();
i = new MyPoint();
calcPointsXY(a,f);

pointPaint = new Paint();
pointPaint.setColor(Color.RED);
pointPaint.setTextSize(25);

bgPaint = new Paint();
bgPaint.setColor(Color.GREEN);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//为了看清楚点与View的位置关系绘制一个背景
canvas.drawRect(0,0,viewWidth,viewHeight,bgPaint);
//绘制各标识点
canvas.drawText(“a”,a.x,a.y,pointPaint);
canvas.drawText(“f”,f.x,f.y,pointPaint);
canvas.drawText(“g”,g.x,g.y,pointPaint);

canvas.drawText(“e”,e.x,e.y,pointPaint);
canvas.d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是实现水平进度条的自定义 View 的步骤: 1. 定义属性 在自定义 View 的类中定义属性,包括进度条的颜色、背景色、高度等等。 ```java public class HorizontalProgressBar extends View { private int mProgressColor; private int mBackgroundColor; private int mHeight; private int mMax; private int mProgress; ... } ``` 2. 重写 onMeasure() 方法 在 onMeasure() 方法中,设置 View 的宽度和高度,以及默认值。 ```java @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(width, mHeight); if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) { height = MeasureSpec.getSize(heightMeasureSpec); } else { height = mHeight; } setMeasuredDimension(width, height); } ``` 3. 重写 onDraw() 方法 在 onDraw() 方法中,绘制进度条和背景。 ```java @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); float ratio = (float) mProgress / (float) mMax; int progressWidth = (int) (getWidth() * ratio); // 绘制背景 Paint bgPaint = new Paint(); bgPaint.setColor(mBackgroundColor); canvas.drawRect(0, 0, getWidth(), getHeight(), bgPaint); // 绘制进度 Paint progressPaint = new Paint(); progressPaint.setColor(mProgressColor); canvas.drawRect(0, 0, progressWidth, getHeight(), progressPaint); } ``` 4. 设置属性 在自定义 View 的 XML 布局中设置属性,如下: ```xml <com.example.customview.HorizontalProgressBar android:id="@+id/horizontal_progress_bar" android:layout_width="match_parent" android:layout_height="wrap_content" app:progressColor="@color/colorPrimary" app:backgroundColor="@color/gray" app:height="5dp" app:max="100" app:progress="30" /> ``` 5. 在代码中使用 在代码中获取自定义 View,设置进度值。 ```java HorizontalProgressBar progressBar = findViewById(R.id.horizontal_progress_bar); progressBar.setProgress(50); ``` 以上就是实现水平进度条的自定义 View 的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值