您的位置:首页 > 理论基础 > 计算机网络

第二篇 根据识别的结果 我们可以访问一些网络 先写一个水波纹UI

2017-12-10 10:29 501 查看
<com.example.admin.tim.UI.FingerWaveView
android:id="@+id/view_custom"
android:layout_width="140dp"
android:layout_height="140dp"
android:layout_centerInParent="true" />

<ImageView
android:id="@+id/iv"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerInParent="true"
android:src="@mipmap/ic_finger_status" />

<TextView
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:id="@+id/tv_finger_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/iv"
android:text="我是个可爱的麦克风"
android:textColor="#fd7a72"
android:textSize="12sp" />当然ImageView的图片可以自定义public class FingerWaveView extends View {private Ima676ageView image;private TextView textView;private View view;private int start;private Paint mPaint;// 中心点x 坐标, 和 Y 坐标private int mCenterX;private int mCenterY;// 开始绘制的圆的半径 : 默认 183dpprivate int mStartRadius;// 结束绘制的圆的半径private int mEndRadius;// 动画执行的时间private final long mDuration = 1000;// 变化时的圆的半径, 这个是变值...private int mCurrentRadius;// 圆环的半径, = 最大圆的半径 - 最小圆的半径(开始是的半径)private int mDurationWidth;private final int mStartAlpha = 100;private ValueAnimator mValueAnimator;public viewChangeListener viewChangeListener=new viewChangeListener() {@Overridepublic void viewStart() {mStartRadius=start;view.setVisibility(VISIBLE);start();}@Overridepublic void viewEnd() {stop();view.setVisibility(GONE);}};public FingerWaveView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.FingerCaveImageView);mStartRadius = (int)(ta.getDimension(R.styleable.FingerCaveImageView_cave_radius,-1f)+0.5f);start=mStartRadius;init();}// 初始化操作...private void init() {mPaint = new Paint();mPaint.setColor(ContextCompat.getColor(getContext(), R.color.wave_color));mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));// 设置锯齿mPaint.setAntiAlias(true);// 创建一个属性动画, 从0 过度到 1mValueAnimator = ValueAnimator.ofFloat(0, 1.0f);// 设置时长mValueAnimator.setDuration(mDuration);// 重复次数为无限...mValueAnimator.setRepeatCount(ValueAnimator.INFINITE);// 线性插值器mValueAnimator.setInterpolator(new LinearInterpolator());//初始化image=(ImageView)findViewById(R.id.iv);textView=(TextView)findViewById(R.id.tv_finger_status);// 监听过程, 在过程中处理参数变化mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {float value = (float) valueAnimator.getAnimatedValue();mCurrentRadius = (int) (mStartRadius + mDurationWidth * value + 0.5);// 开始重新绘制postInvalidate();}});view=(View)findViewById(R.id.view_custom);view.setVisibility(GONE);((MainActivity)getContext()).getListener(viewChangeListener);}@Overrideprotected void onFinishInflate() {super.onFinishInflate();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);mCenterX = getMeasuredWidth() / 2;mCenterY = getMeasuredHeight() / 2;// 结束 绘制圆的半径为控件总宽度 高度, 的一般mEndRadius = Math.min(getMeasuredWidth(), getMeasuredHeight()) / 2;mDurationWidth = mEndRadius - mStartRadius;}@Overrideprotected void onDraw(Canvas canvas) {// 绘制第一个圆int secondRadius = mCurrentRadius + (int) (mDurationWidth / 2.0f + 0.5f);if (secondRadius > mEndRadius) {secondRadius = mStartRadius + secondRadius - mEndRadius;}int secondAlpha = (int) (mStartAlpha * (1 - (secondRadius - mStartRadius) * 1.0f / mDurationWidth) + 0.5);mPaint.setAlpha(secondAlpha);canvas.drawCircle(mCenterX, mCenterY, secondRadius, mPaint);// 绘制第三个圆int thirdRadius = mCurrentRadius + (int) (mDurationWidth / 2.0f * 2 + 0.5f);if (thirdRadius > mEndRadius) {thirdRadius = mStartRadius + thirdRadius - mEndRadius;}int thirdAlpha = (int) (mStartAlpha * (1 - (thirdRadius - mStartRadius) * 1.0f / mDurationWidth) + 0.5);mPaint.setAlpha(thirdAlpha);canvas.drawCircle(mCenterX, mCenterY, thirdRadius, mPaint);}public void stop() {mValueAnimator.end();}public void start() {mValueAnimator.start();}}关于Listener在MainActivity中private com.example.admin.tim.interfacee.viewChangeListener viewChangeListener;public void getListener(viewChangeListener viewChangeListener){this.viewChangeListener=viewChangeListener;}
((MainActivity)getContext()).getListener(viewChangeListener);

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐