
paint应该在构造方法里赋值的,我在你的代码里面没有看到有赋值的过程。另外你把画笔的颜色设置为白色,那么你的布局的背景颜色就不应该用白色的,否则会显示不出来,这些你应该确认一下。
希望对你有帮助。
1 在xml布局文件中定义可滚动的View,例如ScrollView、RecyclerView等。
2 在Java代码中获取该View,并为其设置OnTouchListener监听器,在触摸事件中处理滑动逻辑。
3 在OnTouchListener监听器的onTouch()方法中,根据手指移动距离计算出需要滚动的距离,并调用View的scrollBy()方法进行滚动。
4 为了模拟阻尼效果,在手指抬起时需要判断是否到达边缘位置,并使用EdgeEffect类来模拟反d效果。具体实现可以参考以下示例代码:
```java
final EdgeEffect mEdgeEffectTop = new EdgeEffect(context);
final EdgeEffect mEdgeEffectBottom = new EdgeEffect(context);
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (eventgetActionMasked()) {
case MotionEventACTION_DOWN:
// 记录按下位置等信息
break;
case MotionEventACTION_MOVE:
// 根据手指移动距离计算需要滚动的距离
int dy = (int) (mLastY - eventgetY());
if (dy > 0 && canScrollUp()) { // 向上滑并且还能继续向上滑
scrollBy(0, dy);
invalidate();
} else if (dy < 0 && canScrollDown()) { // 向下滑并且还能继续向下滑
scrollBy(0, dy);
invalidate();
}
// 记录最后一次触摸点坐标
mLastY = eventgetY();
break;
case MotionEventACTION_UP:
case MotionEventACTION_CANCEL:
if (!mScrollerisFinished()) {
mScrollerabortAnimation();
}
int finalY = getScrollY();
if (finalY < 0) {
mEdgeEffectToponPull(Mathabs(finalY) / getHeight());
postInvalidateOnAnimation();
} else if (finalY > getMaxScrollY()) {
mEdgeEffectBottomonPull(Mathabs(finalY - getMaxScrollY()) / getHeight());
postInvalidateOnAnimation();
}
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas) {
superonDraw(canvas);
if (!mEdgeEffectTopisFinished()) {
final int restoreCount = canvassave();
canvastranslate(getPaddingLeft(), Mathmin(0, getScrollY()));
mEdgeEffectTopsetSize(getWidth() - getPaddingLeft() - getPaddingRight(), getHeight());
if(mEdgeEffectTopdraw(canvas)){
postInvalidateOnAnimation();
}
canvasrestoreToCount(restoreCount);
}
if (!mEdgeEffectBottomisFinished()) {
final int restoreCount = canvassave();
canvastranslate(-getWidth() + getPaddingRight(), Mathmax(getMaxScrollY(), getScrollY()));
canvasrotate(180, getWidth() - getPaddingRight(), 0);
mEdgeEffecBottomsetSize(getWidth() - getPaddingLeft() - getPaddingRight(), getHeight());
if(mEedgeEffecBottomdraw(canvas)){
postInvalidateOnAnimation();
}
canvasrestoreToCount(restoreCount);
}
}
```
其中,getMaxScrollY是获取View最大可垂直方向偏移量;canScrollUp和canSrollDown是判断当前是否还能向上或者向下进行有效的垂直方向位移。
以上就是关于Android canvas是怎么初始化的全部的内容,包括:Android canvas是怎么初始化的、android上拖动view的阻尼edgeeffect效果、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)