Android Studio怎么设置颜色拾色器工具Color Picker
这篇文章主要介绍Android Studio怎么设置颜色拾色器工具Color Picker,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Android是什么
Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
你可能下载过一些获取颜色值的一些小工具,
这种方式获取颜色,需要先切换窗口转跳到桌面,然后打开拾色器小工具程序,然后去拾取颜色;
你可能也知道Android Studio自带一个颜色拾色器,通过下面这种方式才能找到
这种方式获取颜色值限制性很强,需要特定的窗口,需要点击那么一小块颜色才能弹出窗口,才能使用
那有没有更好的方式? 答案是肯定的,不然这些个干嘛~~
不用向上面那样去打开拾色器小工具程序,不用在特定的窗口点击特定的位置弹出拾色器工具,是用我们最喜欢的快捷键的方式打开
Android Studio自带了颜色拾色器工具,但是它没有设置快捷键,也没有告诉我们, 这才是问题,
不罗嗦了,跟着下面的设置去设置快捷键吧
设置好之后Apply应用 + OK确认下就好了
下面就能愉快的玩耍了,Alt+C~~
补充知识:Android 自定义一个简版的取色器ColorPicker
最近在一个项目中要用到修改颜色功能,于是搜索了一波android自定义取色器,虽然搜索结果很多,但是都不是令人十分满意(可能是用久了AndroidStudio自带取色器的原因,真的是太好用了有没有?)。
既然这么喜欢AS的调色板,何不自己撸一个?心动不如行动,马上动手!
常规操作,先上效果图,简版取色器效果如下:
项目地址:
https://github.com/shixiuwen/colorpicker
布局单位使用的是dp,没有做其他过多适配操作,程序的源码很简单,可以直接clone下来修改成自己想要的效果或者做其他定制操作,直接使用的话,集成参考如下:
Step 1. Add the JitPack repository to your build file
//在根build.gradle中添加 allprojects{ repositories{ ... maven{url'https://jitpack.io'} } }
Step 2. Add the dependency
//在模块build.gradle中添加 dependencies{ //v1.0.3是版本号,博客不会经常更新,最新版本见github implementation'com.github.shixiuwen:colorpicker:v1.0.3' }
调用示例:
//.xml文件中 <com.shixia.colorpickerview.ColorPickerView android:id="@+id/cpv_color" android:layout_width="match_parent" android:layout_height="wrap_content"/>
//Activity中 finalTextViewtvTest=findViewById(R.id.tv_test); ColorPickerViewcolorPicker=findViewById(R.id.cpv_color_picker); //对控件进行回调监听,获取颜色值color colorPicker.setOnColorChangeListener(newOnColorChangeListener(){ @Override publicvoidcolorChanged(intcolor){ tvTest.setBackgroundColor(color); } });
该控件的颜色变化过程是通过观察AndroidStudio取色板颜色变化规律而得到的,因为项目没有其他要求,所以目前没有提供其他公开方法可以供外部调用,有这方面需求的可以自己把库下载下来自动修改,有修改困难的可以邮件联系。另外,如果后面该库会收到几个start的话会考虑加一些其他功能,比如 布局适配、颜色初始化功能、常用颜色记录功能…… 等等。
以下是关键类代码:
packagecom.shixia.colorpickerview; importandroid.content.Context; importandroid.graphics.Color; importandroid.graphics.drawable.GradientDrawable; importandroid.util.AttributeSet; importandroid.view.LayoutInflater; importandroid.view.MotionEvent; importandroid.view.View; importandroid.widget.ImageView; importandroid.widget.LinearLayout; importandroid.widget.RelativeLayout; publicclassColorPickerViewextendsLinearLayout{ privatefinalViewllColorProgress; privatefinalViewvColorBar; privatefinalViewrlTransBar; privatefinalViewvTransBar; privatefinalRelativeLayout.LayoutParamstransBarLayoutParams; privateintred=255,green=0,blue=0; privateintindex=0; privateColorPreviewViewcpvColorPreview; privateViewvLocation; privateViewvBgColor; privatefinalRelativeLayout.LayoutParamscolorBarLayoutParams; privateinttransValue=255;//透明度 privatefinalImageViewvTransPreview; privateOnColorChangeListeneronColorChangeListener; privateRelativeLayout.LayoutParamsvLocationLayoutParams; publicColorPickerView(Contextcontext,AttributeSetattrs){ super(context,attrs); Viewview=LayoutInflater.from(context).inflate(R.layout.view_color_picker,this); vBgColor=view.findViewById(R.id.fl_color); vLocation=view.findViewById(R.id.view_location); vLocationLayoutParams=(RelativeLayout.LayoutParams)vLocation.getLayoutParams(); llColorProgress=findViewById(R.id.ll_color_progress); cpvColorPreview=view.findViewById(R.id.cpv_color_preview); vColorBar=view.findViewById(R.id.view_color_bar); colorBarLayoutParams=(RelativeLayout.LayoutParams)vColorBar.getLayoutParams(); rlTransBar=view.findViewById(R.id.rl_trans_bar); vTransBar=view.findViewById(R.id.view_trans_bar); transBarLayoutParams=(RelativeLayout.LayoutParams)vTransBar.getLayoutParams(); vTransPreview=view.findViewById(R.id.view_trans_preview); /*调整颜色*/ llColorProgress.setOnTouchListener(newOnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ intaction=event.getAction(); intwidth=llColorProgress.getWidth(); switch(action){ caseMotionEvent.ACTION_DOWN: break; caseMotionEvent.ACTION_MOVE: break; caseMotionEvent.ACTION_UP: break; } floatleftMargin=event.getX(); floatx=0; if(leftMargin<vColorBar.getWidth()/2){ colorBarLayoutParams.leftMargin=0; }elseif(leftMargin>width-vColorBar.getWidth()/2){ x=100; colorBarLayoutParams.leftMargin=width-vColorBar.getWidth(); }else{ x=event.getX()/width*100; colorBarLayoutParams.leftMargin=(int)(leftMargin-vColorBar.getWidth()/2); } vColorBar.setLayoutParams(colorBarLayoutParams); onProgressChanged((int)x); returntrue; } }); /*调整透明度*/ rlTransBar.setOnTouchListener(newOnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ intaction=event.getAction(); intwidth=rlTransBar.getWidth(); switch(action){ caseMotionEvent.ACTION_DOWN: break; caseMotionEvent.ACTION_MOVE: break; caseMotionEvent.ACTION_UP: break; } floatleftMargin=event.getX(); floatx=0; if(leftMargin<vTransBar.getWidth()/2){ transBarLayoutParams.leftMargin=0; }elseif(leftMargin>width-vTransBar.getWidth()/2){ x=100; transBarLayoutParams.leftMargin=width-vTransBar.getWidth(); }else{ x=event.getX()/width*100; transBarLayoutParams.leftMargin=(int)(leftMargin-vTransBar.getWidth()/2); } vTransBar.setLayoutParams(transBarLayoutParams); changeTransparency((int)x); returntrue; } }); /*调整颜色明暗*/ vBgColor.setOnTouchListener(newOnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ intwidth=vBgColor.getWidth(); intheight=vBgColor.getHeight(); intaction=event.getAction(); intleftMargin; inttopMargin; switch(action){ caseMotionEvent.ACTION_DOWN: break; caseMotionEvent.ACTION_MOVE: //防止越界处理 if(event.getX()>width-vLocation.getWidth()/2F){ leftMargin=width-vLocation.getWidth(); }elseif(event.getX()<vLocation.getWidth()/2F){ leftMargin=0; }else{ leftMargin=(int)(event.getX()-vLocation.getWidth()/2F); } if(event.getY()>height-vLocation.getHeight()/2F){ topMargin=height-vLocation.getHeight(); }elseif(event.getY()<=vLocation.getHeight()/2F){ topMargin=0; }else{ topMargin=(int)(event.getY()-vLocation.getHeight()/2F); } vLocationLayoutParams.leftMargin=leftMargin; vLocationLayoutParams.topMargin=topMargin; vLocation.setLayoutParams(vLocationLayoutParams); changeColor(); break; caseMotionEvent.ACTION_UP: break; } returntrue; } }); } /** *颜色值调整 * *@paramprogressColor */ privatevoidonProgressChanged(intprogressColor){ red=0; green=0; blue=0; index=(int)(progressColor/(100/6F)); floatv=progressColor%(100/6F)/(100/6F); switch(index){ case0://红<-->中--绿 red=255; green=(int)(255*v); break; case1://红--中<-->绿 red=(int)(255*(1-v)); green=255; break; case2://绿<-->中--蓝 green=255; blue=(int)(255*v); break; case3://绿--中<-->蓝 green=(int)(255*(1-v)); blue=255; break; case4://蓝<-->中--红 blue=255; red=(int)(255*v); break; case5://蓝--中<-->红 blue=(int)(255*(1-v)); red=255; break; default: red=255; break; } vBgColor.setBackgroundColor(Color.rgb(red,green,blue)); changeColor(); } /** *颜色明暗度调整 */ privatevoidchangeColor(){ inttempRed=red; inttempGreen=green; inttempBlue=blue; floathPercent=1-(vLocation.getX()/(vBgColor.getWidth()-vLocation.getWidth())); floatvPercent=vLocation.getY()/(vBgColor.getHeight()-vLocation.getHeight()); switch(index){ case0: tempGreen=(int)(green+hPercent*(255-green)); tempBlue=(int)(blue+hPercent*(255-blue)); break; case1: tempRed=(int)(red+hPercent*(255-red)); tempBlue=(int)(blue+hPercent*(255-blue)); break; case2: tempRed=(int)(red+hPercent*(255-red)); tempBlue=(int)(blue+hPercent*(255-blue)); break; case3: tempRed=(int)(red+hPercent*(255-red)); tempGreen=(int)(green+hPercent*(255-green)); break; case4: tempRed=(int)(red+hPercent*(255-red)); tempGreen=(int)(green+hPercent*(255-green)); break; case5: case6: tempGreen=(int)(green+hPercent*(255-green)); tempBlue=(int)(blue+hPercent*(255-blue)); break; } tempRed=(int)(tempRed-tempRed*vPercent); tempGreen=(int)(tempGreen-tempGreen*vPercent); tempBlue=(int)(tempBlue-tempBlue*vPercent); intcolor=Color.argb(transValue,tempRed,tempGreen,tempBlue); cpvColorPreview.setColor(color); if(onColorChangeListener!=null){ onColorChangeListener.colorChanged(color); } int[]gradientColor={Color.argb(0,0,0,0),Color.rgb(tempRed,tempGreen,tempBlue)}; GradientDrawabledrawable=newGradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,gradientColor); vTransPreview.setBackground(drawable); } /** *改变透明度 * *@paramprogress */ privatevoidchangeTransparency(intprogress){ transValue=(int)(progress/100F*255); intcolor=Color.argb(transValue,red,green,blue); cpvColorPreview.setColor(color); if(onColorChangeListener!=null){ onColorChangeListener.colorChanged(color); } } @Override publicvoidonWindowFocusChanged(booleanhasWindowFocus){ super.onWindowFocusChanged(hasWindowFocus); RelativeLayout.LayoutParamslayoutParams=(RelativeLayout.LayoutParams)vLocation.getLayoutParams(); layoutParams.leftMargin=vBgColor.getWidth()-vLocation.getWidth(); vLocation.setLayoutParams(layoutParams); colorBarLayoutParams.leftMargin=llColorProgress.getWidth()-vColorBar.getWidth(); vColorBar.setLayoutParams(colorBarLayoutParams); transBarLayoutParams.leftMargin=rlTransBar.getWidth()-vTransBar.getWidth(); vTransBar.setLayoutParams(transBarLayoutParams); int[]color={Color.argb(0,0,0,0),Color.rgb(255,0,0)}; GradientDrawabledrawable=newGradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,color); vTransPreview.setBackground(drawable); } /** *设置该方法,颜色改变的时候会回调颜色值 * *@paramonColorChangeListener */ publicvoidsetOnColorChangeListener(OnColorChangeListeneronColorChangeListener){ this.onColorChangeListener=onColorChangeListener; } }
以上是“Android Studio怎么设置颜色拾色器工具Color Picker”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
-
HTML5如何实现禁止android视频另存为
-
学java好还是学php好?
-
Android如何实现多点触控功能