Android P SystemUI 添加自定义垂直SeekBar控件,带监听事件
发布日期:2021-06-29 01:27:17 浏览次数:2 分类:技术文章

本文共 4590 字,大约阅读时间需要 15 分钟。

将定义水平seekbar旋转-90度, 直接上代码

package com.android.systemui.statusbar.car.hvac;import android.widget.SeekBar;import android.content.Context;import android.graphics.Canvas;import android.annotation.NonNull;import android.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.annotation.SuppressLint;import android.content.res.TypedArray;import android.util.Log;import com.android.systemui.R;import com.android.systemui.Dependency;public class CarVerticalSeekBar extends SeekBar implements HvacSeekBar, HvacComponent {
private static final String TAG = "CarVerticalSeekBar"; private static final boolean DEBUG = true; private OnSeekBarChangeListener mOnSeekBarChangeListener; private final int mAreaId; private final int mPropertyId; private final int mHvacOffset; private final int mLastPostion; public CarVerticalSeekBar(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CarVerticalSeekBar); try {
mAreaId = typedArray.getInt(R.styleable.CarVerticalSeekBar_hvacAreaId, -1); mPropertyId = typedArray.getInt(R.styleable.CarVerticalSeekBar_hvacPropertyId, -1); mHvacOffset = typedArray.getInt(R.styleable.CarVerticalSeekBar_hvacOffset, -1); } finally {
typedArray.recycle(); } if (DEBUG) {
Log.i(TAG, "mAreaId :" + mAreaId); Log.i(TAG, "mPropertyId :" + mPropertyId); } // register with controller HvacController hvacController = Dependency.get(HvacController.class); hvacController.addHvacView(this, true); mLastPostion = getProgress(); } @Override protected void onDraw(Canvas canvas) {
canvas.rotate(-90); canvas.translate(-getHeight(), 0); super.onDraw(canvas); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getMeasuredHeight(); int height = getMeasuredWidth(); setMeasuredDimension(width, height); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(h, w, oldh, oldw); } public void setOnSeekBarChangeListener(OnSeekBarChangeListener l) {
mOnSeekBarChangeListener = l; } private void onStartTrackingTouch() {
if (mOnSeekBarChangeListener != null) {
mOnSeekBarChangeListener.onStartTrackingTouch(this); } } private void onStopTrackingTouch() {
if (mOnSeekBarChangeListener != null) {
mOnSeekBarChangeListener.onStopTrackingTouch(this); } } private void onProgressChanged() {
if (mOnSeekBarChangeListener != null) {
int progress = getProgress(); //Log.i("tag", "yong onProgressChanged ACTION_MOVE"); mOnSeekBarChangeListener.onProgressChanged(this, progress, false); } } @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent event) {
if (!isEnabled()) return false; switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: setPressed(true); onStartTrackingTouch(); break; case MotionEvent.ACTION_MOVE: onProgressChanged(); int progress = getMax() - (int) (getMax() * event.getY() / getHeight()); setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: onStopTrackingTouch(); setPressed(false); break; } return true; } @Override public int getPropertyId() {
return mPropertyId; } @Override public int getAreaId() {
return mAreaId; } @Override public void setTemp(float temp) {
if(DEBUG) {
Log.i(TAG, "setTemp temp: " + temp); } int value = ((int)temp) - mHvacOffset; setProgress((int)value); } @Override public float getTemp() {
return 0; } public int getHvacOffset(){
return mHvacOffset; }}

xml中引用

这里遇到一个问题,在拖动滑块时,会再水平方向上多出一个灰色圆形小球。

添加下面配置修正,android:splitTrack="false"这个说是修改滑块透明度的,未验证

android:background="@null"android:splitTrack="false"

转载地址:https://blog.csdn.net/yt_42370304/article/details/114632829 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android快速拉取framework/base仓库
下一篇:Android P SystemUI 添加Icon到statusbar 遇到图标变大问题

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月12日 18时09分45秒