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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月12日 18时09分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
修改ant design的tooltip组件中的字体颜色(2分钟解决战斗)
2019-04-29
参观邓小平故居有感
2019-04-29
教你如何查看linux版本
2019-04-29
Linux下利用crontab执行任务
2019-04-29
RedHat Linux下注册Apache为系统服务
2019-04-29
使用LoadRunner监控Apache的步骤
2019-04-29
LoadRunner录制脚本时报加载GrooveUtil.dll出错的解决方法
2019-04-29
用Spotlight实时监控Windows Server 2008
2019-04-29
Tomcat 6.0.32中调整JVM大小及最大线程数
2019-04-29
Mysql数据库下载及安装
2019-04-29
MySql安装时解决要输入current root password的方法
2019-04-29
Linux下free命令详解
2019-04-29
Linux下启动rpc时提示Cannot register service: RPC: Unableto receive; errno = Connectionrefused的问题
2019-04-29
Google纪念遗传学之父孟德尔诞辰一百周年图标
2019-04-29
在Apache下配置多个虚拟主机站点
2019-04-29
Apache中目录权限访问控制配置
2019-04-29
Apache的认证和授权配置
2019-04-29
【学习笔记】Linux下CPU性能评估
2019-04-29
【学习笔记】Linux下内存性能评估
2019-04-29