diff options
Diffstat (limited to 'src/com/android/launcher3/pageindicators/CaretDrawable.java')
-rw-r--r-- | src/com/android/launcher3/pageindicators/CaretDrawable.java | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/com/android/launcher3/pageindicators/CaretDrawable.java b/src/com/android/launcher3/pageindicators/CaretDrawable.java new file mode 100644 index 000000000..3a7fc4264 --- /dev/null +++ b/src/com/android/launcher3/pageindicators/CaretDrawable.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.launcher3.pageindicators; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PixelFormat; + +import com.android.launcher3.R; + +import android.graphics.drawable.Drawable; + +public class CaretDrawable extends Drawable { + public static final int LEVEL_CARET_POINTING_UP = 0; // minimum possible level value + public static final int LEVEL_CARET_POINTING_DOWN = 10000; // maximum possible level value + public static final int LEVEL_CARET_NEUTRAL = LEVEL_CARET_POINTING_DOWN / 2; + + private float mCaretProgress; + + private Paint mPaint = new Paint(); + private Path mPath = new Path(); + private int mInset; + + public CaretDrawable(Context context) { + final Resources res = context.getResources(); + + mPaint.setColor(res.getColor(R.color.all_apps_caret_color)); + mPaint.setAntiAlias(true); + mPaint.setStrokeWidth(res.getDimensionPixelSize(R.dimen.all_apps_caret_stroke_width)); + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setStrokeCap(Paint.Cap.SQUARE); + mPaint.setStrokeJoin(Paint.Join.MITER); + + mInset = res.getDimensionPixelSize(R.dimen.all_apps_caret_inset); + } + + @Override + public void draw(Canvas canvas) { + final float width = getBounds().width(); + final float height = getBounds().height(); + final float left = getBounds().left; + final float top = getBounds().top; + + final float verticalInset = (height / 4); + final float caretHeight = (height - (verticalInset * 2)); + + mPath.reset(); + mPath.moveTo(left, top + caretHeight * (1 - mCaretProgress)); + mPath.lineTo(left + (width / 2), top + caretHeight * mCaretProgress); + mPath.lineTo(left + width, top + caretHeight * (1 - mCaretProgress)); + + canvas.drawPath(mPath, mPaint); + } + + @Override + protected boolean onLevelChange(int level) { + mCaretProgress = (float) level / (float) LEVEL_CARET_POINTING_DOWN; + invalidateSelf(); + return true; + } + + @Override + public int getOpacity() { + return PixelFormat.OPAQUE; + } + + @Override + public void setAlpha(int alpha) { + // no-op + } + + @Override + public void setColorFilter(ColorFilter cf) { + // no-op + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + super.setBounds(left + mInset, top + mInset, right - mInset, bottom - mInset); + } +} |