慕无忌9063056
2020-10-25
weixin_慕尼黑8068974
2020-05-28
是可以设置颜色的,但是没有细说这个问题,自己想一下吧
华园企程王众
2020-05-22
qq_精慕门2073387
2019-10-31
不是的,是要按加的增,
慕尼黑9152544
2019-04-17
愚妄i
2018-07-10
//下拉View
public class PullDownView extends View {
private float mProgress;
Paint mCirclePaint;
private int mCircleRadius = 150;
private int mCircleRadiuX, mCircleRadiuY;
//可拖动的高度
private int mDragHeight = 800;
public PullDownView(Context context) {
super(context);
init();
}
public PullDownView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public PullDownView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public PullDownView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
private void init() {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//设置抗锯齿
paint.setAntiAlias(true);
//设置防抖
paint.setDither(true);
//设置填充方式
paint.setStyle(Paint.Style.FILL);
paint.setColor(0xff000000);
mCirclePaint = paint;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(mCircleRadiuX, mCircleRadiuY, mCircleRadius, mCirclePaint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
int minWidth = 2*mCircleRadius+getPaddingLeft()+getPaddingRight();
int minHeight = (int) ((mDragHeight*mProgress +0.5f)+getPaddingTop()+getPaddingBottom());
int measureWidth, measureHeight;
if (widthMode == MeasureSpec.EXACTLY){
//确定的值
measureWidth = width;
} else if (widthMode == MeasureSpec.AT_MOST){
//最多的值
measureWidth = Math.min(minWidth, width);
} else {
measureWidth = minWidth;
}
if (heightMode == MeasureSpec.EXACTLY){
//确定的值
measureHeight = height;
} else if (heightMode == MeasureSpec.AT_MOST){
//最多的值
measureHeight = Math.min(minHeight, height);
} else {
measureHeight = minHeight;
}
//设置宽高
setMeasuredDimension(measureWidth, measureHeight);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mCircleRadiuX = getWidth()>>1;
mCircleRadiuY = getHeight()>>1;
}
/**
* 设置拖动进度
* @param progress
*/
public void setProgress(float progress){
Log.e("TAG", "p"+progress);
mProgress = progress;
requestLayout();
}
}
//RelativeLayout下拉监听
final PullDownView pullDownView = findViewById(R.id.pulldown);
findViewById(R.id.activity_main).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
mTouchMoveStartY = motionEvent.getY();
return true;
case MotionEvent.ACTION_MOVE:
float y = motionEvent.getY();
if (y>=mTouchMoveStartY){
float moveSize = y - mTouchMoveStartY;
float progress = moveSize>= TOUCH_MOVE_MAX_Y? 1: moveSize/TOUCH_MOVE_MAX_Y;
pullDownView.setProgress(progress);
}
return true;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
//Xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:top="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
<com.summer.h5.View.PullDownView
android:id="@+id/pulldown"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
Alex6
2018-05-01
发现问题了,原来是没有添加线程
有种放学别跑
2018-03-23
这个只是为了四舍五入而已,比如mDragHeight * progress = 1.5f时,当没有加上0.5f时,转int时就为1,当加上0.5f时,就为2.0f转int时就为2,满足四舍五入了
慕无忌3143822
2017-12-16
可能是你的版本设置的太低了
慕丝730910
2017-12-13
Atlas_Kevin
2017-11-06
光标移动到红线处 按住ALT+Enter提示 就会出来教程里面的选择第一个constructor那个 就会出来选择构造方法的界面
萌萌的笨笨4283846
2017-11-01
我也是这样的 拉动后没反应
qq_小红帽_16
2017-10-25
是代码块吧,,
qq_小红帽_16
2017-10-25
这个是可以设置代码块弄的吧
慕标600203
2017-09-15
慕标600203
2017-09-15
放在MotionEvent.ACTION_UP中
阿钟程序猿
2017-09-13
Derossiwang
2017-08-31
应该是在MainActivity中的监听事件中添加一个
case MotionEvent.ACTION_UP:
pullView.release();
break;
掌控代码
2017-08-15
通常会把参数t当作时间,那么曲线长度随t的变化率也就称作曲线的速率。就是说如果对于P(t)求导就是得到的函数就是t时刻的速度
狂热爱好者
2017-08-10
qq_Faraward_0
2017-07-25
Drawable drawable=mContent;
if (drawable!=null){
canvas.save();
//剪切矩形区域
canvas.clipRect(drawable.getBounds());
canvas.rotate(mRotate,mCirclePointX,mCirclePointY);
drawable.draw(canvas);
}
canvas的rotate(float,float,float)方法是旋转画布
第一个参数:旋转角度(0~无穷)
第二个参数:旋转中心点x坐标
第三个参数:旋转中心点y坐标
慕雪4348792
2017-07-23
请在setOnTouchListener的MotionEvent.ACTION_UP时候调用mPullDownView.release(),release();就是写在自定义view中的那个值动画函数
public void release() {
if (valueAnimator == null){
valueAnimator = ValueAnimator.ofFloat(mProgress,0);
valueAnimator.setDuration(300);
valueAnimator.setInterpolator(new DecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Object value = animation.getAnimatedValue();
if (value instanceof Float){
setProgress((Float) value);
}
}
});
}else {
valueAnimator.cancel();
valueAnimator.setFloatValues(mProgress,0);
}
valueAnimator.start();
}
qq_GreatKing_0
2017-07-19
我整理了一下,不过是分开的文件,不是工程,需要的话可以下载。
http://pan.baidu.com/s/1pLt2TQF
qq_双民_0
2017-07-09
SketchBook
慕粉1357432043
2017-07-03
有,自定义view,和工具无关
reallythat
2017-07-03
确实是相当于float[] values,调用时传入的参数会被自动放入一个数组;并且声明时float... values 必须是最后一个参数。
参考: https://stackoverflow.com/questions/7539033/java-multiple-arguments-dot-notation-varargs
qq_wt_5
2017-07-01
我在自己敲,目前敲到3-2
慕尼黑3154129
2017-06-30
我最开始见到这种“动画”效果的时候,我想到的是外层肯定是有一系列的点连起来的曲线,决定这个曲线的点肯定遵循了某种算法进行分布。我当时只想到了这里,至于用了什么算法当时只是随便搜了一下,搜到了贝塞尔曲线,但是当时没研究怎么实现的。
玩吉他的卷眉毛
2017-06-28
我整理了一下,不过是分开的文件,不是工程,需要的话可以下载。
http://pan.baidu.com/s/1pLt2TQF
你可以对比一下
慕尼黑4942162
2017-06-20
在case MotionEvent.ACTION_DOWN:
要处理的事
return true;(表示消费了这个事件)
move事件也是如此