AndroidStudio设置颜⾊拾⾊器⼯具ColorPicker教程
你可能下载过⼀些获取颜⾊值的⼀些⼩⼯具,
这种⽅式获取颜⾊,需要先切换窗⼝转跳到桌⾯,然后打开拾⾊器⼩⼯具程序,然后去拾取颜⾊;
你可能也知道Android Studio⾃带⼀个颜⾊拾⾊器,通过下⾯这种⽅式才能到
这种⽅式获取颜⾊值限制性很强,需要特定的窗⼝,需要点击那么⼀⼩块颜⾊才能弹出窗⼝,才能使⽤
那有没有更好的⽅式?答案是肯定的,不然这些个⼲嘛~~
不⽤向上⾯那样去打开拾⾊器⼩⼯具程序,不⽤在特定的窗⼝点击特定的位置弹出拾⾊器⼯具,是⽤我们最喜欢的快捷键的⽅式打开
Android Studio⾃带了颜⾊拾⾊器⼯具,但是它没有设置快捷键,也没有告诉我们,这才是问题,
不罗嗦了,跟着下⾯的设置去设置快捷键吧
下⾯就能愉快的玩耍了,Alt+C~~
补充知识:Android ⾃定义⼀个简版的取⾊器ColorPicker
最近在⼀个项⽬中要⽤到修改颜⾊功能,于是搜索了⼀波android⾃定义取⾊器,虽然搜索结果很多,但是都不是令⼈⼗分满意(可能是⽤久了AndroidStudio⾃带取⾊器的原因,真的是太好⽤了有没有?)。
既然这么喜欢AS的调⾊板,何不⾃⼰撸⼀个?⼼动不如⾏动,马上动⼿!
常规操作,先上效果图,简版取⾊器效果如下:
项⽬地址:
布局单位使⽤的是dp,没有做其他过多适配操作,程序的源码很简单,可以直接clone下来修改成⾃⼰想要的效果或者做其他定制操作,直接使⽤的话,集成参考如下:
Step 1. Add the JitPack repository to your build file
//在根 adle 中添加
allprojects {
repositories {
...
maven { url 'jitpack.io' }
}
}
Step 2. Add the dependency
//在模块 adle 中添加
dependencies {
//v1.0.3是版本号,博客不会经常更新,最新版本见github
implementation 'com.github.shixiuwen:colorpicker:v1.0.3'
}
调⽤⽰例:
// .xml⽂件中
<lorpickerview.ColorPickerView
android:id="@+id/cpv_color"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
/
/ Activity中
final TextView tvTest = findViewById(R.id.tv_test);
ColorPickerView colorPicker = findViewById(R.id.cpv_color_picker);
//对控件进⾏回调监听,获取颜⾊值color
colorPicker.setOnColorChangeListener(new OnColorChangeListener() {
@Override
public void colorChanged(int color) {
tvTest.setBackgroundColor(color);
}
});
该控件的颜⾊变化过程是通过观察AndroidStudio取⾊板颜⾊变化规律⽽得到的,因为项⽬没有其他要求,
所以⽬前没有提供其他公开⽅法可以供外部调⽤,有这⽅⾯需求的可以⾃⼰把库下载下来⾃动修改,有修改困难的可以邮件联系。另外,如果后⾯该库会收到⼏个start的话会考虑加⼀些其他功能,⽐如布局适配、颜⾊初始化功能、常⽤颜⾊记录功能…… 等等。
以下是关键类代码:
package lorpickerview;
t.Context;
aphics.Color;
aphics.drawable.GradientDrawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class ColorPickerView extends LinearLayout {
private final View llColorProgress;
private final View vColorBar;
private final View rlTransBar;
private final View vTransBar;
private final RelativeLayout.LayoutParams transBarLayoutParams;
private int red = 255, green = 0, blue = 0;
private int index = 0;
private ColorPreviewView cpvColorPreview;
private View vLocation;
private View vBgColor;
private final RelativeLayout.LayoutParams colorBarLayoutParams;
private int transValue = 255; //透明度
private final ImageView vTransPreview;
private OnColorChangeListener onColorChangeListener;
private RelativeLayout.LayoutParams vLocationLayoutParams;
public ColorPickerView(Context context, AttributeSet attrs) {
super(context, attrs);
View view = 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) LayoutParams();
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) LayoutParams(); rlTransBar = view.findViewById(R.id.rl_trans_bar);
vTransBar = view.findViewById(R.id.view_trans_bar);
transBarLayoutParams = (RelativeLayout.LayoutParams) LayoutParams(); vTransPreview = view.findViewById(R.id.view_trans_preview);
/*调整颜⾊*/
llColorProgress.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = Action();
int width = Width();
switch (action) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
float up}
float leftMargin = X();
float x = 0;
if (leftMargin < Width() / 2) {
colorBarLayoutParams.leftMargin = 0;
} else if (leftMargin > width - Width() / 2) {
x = 100;
colorBarLayoutParams.leftMargin = width - Width();
} else {
x = X() / width * 100;
colorBarLayoutParams.leftMargin = (int) (leftMargin - Width() / 2);
}
vColorBar.setLayoutParams(colorBarLayoutParams);
onProgressChanged((int) x);
return true;
}
});
/*调整透明度*/
rlTransBar.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = Action();
int width = Width();
switch (action) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
float leftMargin = X();
float x = 0;
if (leftMargin < Width() / 2) {
transBarLayoutParams.leftMargin = 0;
} else if (leftMargin > width - Width() / 2) {
x = 100;
transBarLayoutParams.leftMargin = width - Width();
} else {
x = X() / width * 100;
transBarLayoutParams.leftMargin = (int) (leftMargin - Width() / 2);
}
vTransBar.setLayoutParams(transBarLayoutParams);
changeTransparency((int) x);
return true;
}
});
/*调整颜⾊明暗*/
vBgColor.setOnTouchListener(new OnTouchListener() {
@Override
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论