Android颜色选择器 - Go语言中文社区

Android颜色选择器


最近要做画板的软件,需要为画笔选择颜色,然后根据滑动的轨迹进行画图,本着不重复早轮子的精神(主要是不会),在GitHub上搜了一下,找到了一个不错的今天记录一下。
先看效果图:
这里写图片描述
动态的:
这里写图片描述
我是用弹出Dialog的形式进行颜色选择,也可用其他方式使用。
github链接:
https://github.com/LarsWerkman/HoloColorPicker

首先在app 下gradle添加依赖。

compile 'com.larswerkman:HoloColorPicker:1.5'

主要的代码


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.TextView;

import com.larswerkman.holocolorpicker.ColorPicker;
import com.larswerkman.holocolorpicker.OpacityBar;
import com.larswerkman.holocolorpicker.SVBar;
import com.tianzl.photofilter.R;

/**
 * 颜色选择器Dialog
 * Created by tianzl on 2017/9/1.
 */

public class ColorPickerDialog extends DialogFragment {
    private ImageButton ibBack;
    private ImageButton ibEnsure;
    private TextView tvTitle;
    private ColorPicker colorPicker;
    private SVBar svBar;
    private OpacityBar opacityBar;
    private TextView tvExamples;
    private int color;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        View view=inflater.inflate(R.layout.dialog_color_picker,container,false);
        initView(view);
        initData();
        initEvent();
        return view;
    }
    private void initData() {
        colorPicker.addSVBar(svBar);
        colorPicker.addOpacityBar(opacityBar);
        tvTitle.setText("颜色选择器");
    }
    private void initView(View view) {
        ibBack=view.findViewById(R.id.bar_title_left);
        ibEnsure=view.findViewById(R.id.bar_title_right);
        tvTitle=view.findViewById(R.id.bar_title_title);
        colorPicker=view.findViewById(R.id.dialog_color_picker_colorPicker);
        svBar=view.findViewById(R.id.dialog_color_picker_svbar);
        opacityBar=view.findViewById(R.id.dialog_color_picker_opacity);
        tvExamples=view.findViewById(R.id.dialog_color_picker_examples);
    }
    private void initEvent() {
        colorPicker.setOnColorChangedListener(new ColorPicker.OnColorChangedListener() {
            @Override
            public void onColorChanged(int colors) {
                tvExamples.setTextColor(colors);
                color=colors;
            }
        });
        ibBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onBack();
                dismiss();
            }
        });
        ibEnsure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onEnsure(color);
                dismiss();
            }
        });
    }
    public interface OnColorListener{
        void onBack();
        void onEnsure(int color);
    }
    private OnColorListener listener;
    public void setOnColorChangeListenter(OnColorListener listener){
        this.listener=listener;
    }
}

我只添加了两个控制器 一个是颜色的深度一个是颜色的透明度:其他的还有几个就不全部演示了,用法都一样,github链接上都有。

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <include
        android:id="@+id/dialog_color_picker_title"
        android:layout_height="50dp"
        layout="@layout/title_bar"
        android:layout_width="match_parent" />
    <View
        android:layout_below="@+id/dialog_color_picker_title"
        style="@style/horizontal_divider_e3"/>
    <com.larswerkman.holocolorpicker.ColorPicker
        android:id="@+id/dialog_color_picker_colorPicker"
        android:layout_below="@+id/dialog_color_picker_title"
        android:layout_centerInParent="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/dialog_color_picker_tv_sv"
        android:text="@string/color_depth"
        android:layout_below="@+id/dialog_color_picker_colorPicker"
        android:gravity="center_vertical"
        android:layout_width="100dp"
        android:layout_height="30dp" />
    <com.larswerkman.holocolorpicker.SVBar
        android:id="@+id/dialog_color_picker_svbar"
        android:layout_toRightOf="@+id/dialog_color_picker_tv_sv"
        android:layout_below="@+id/dialog_color_picker_colorPicker"
        android:layout_width="match_parent"
        android:layout_height="30dp"/>
    <TextView
        android:id="@+id/dialog_color_picker_tv_opacity"
        android:text="@string/transparency"
        android:layout_below="@+id/dialog_color_picker_svbar"
        android:gravity="center_vertical"
        android:layout_width="100dp"
        android:layout_height="30dp" />
    <com.larswerkman.holocolorpicker.OpacityBar
        android:id="@+id/dialog_color_picker_opacity"
        android:layout_toRightOf="@+id/dialog_color_picker_tv_opacity"
        android:layout_below="@+id/dialog_color_picker_svbar"
        android:layout_width="match_parent"

        android:layout_height="30dp"/>
    <TextView
        android:id="@+id/dialog_color_picker_examples"
        android:text="@string/examples_text"
        android:textSize="40dp"
        android:layout_marginTop="5dp"
        android:layout_below="@+id/dialog_color_picker_opacity"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</RelativeLayout>

title_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="80dp">
    <ImageButton
        android:id="@+id/bar_title_left"
        android:src="@mipmap/back_1"
        android:background="@android:color/transparent"
        style="@style/horizontal_mean" />
    <TextView
        android:id="@+id/bar_title_title"
        android:text="@string/dialog_folder_title"
        android:gravity="center"
        android:textSize="20sp"
        style="@style/horizontal_mean"
        android:layout_weight="5"/>
    <ImageButton
        android:id="@+id/bar_title_right"
        android:src="@mipmap/ensure"
        android:background="@android:color/transparent"
        style="@style/horizontal_mean" />
</LinearLayout>

最后在Activity中调用一下方法即可:

 /**
     * 选择颜色的dialog
     */
    public void showPaintColorDialog(){
        ColorPickerDialog colorPickerDialog=new ColorPickerDialog();
        colorPickerDialog.show(getSupportFragmentManager(),"dialog_color");
        colorPickerDialog.setOnColorChangeListenter(new ColorPickerDialog.OnColorListener() {
            @Override
            public void onEnsure(int color) {
                if (color==0){
                    surfaceView.setColor(Color.BLACK);
                }
                surfaceView.setColor(color);
                paintColor=color;
            }
            @Override
            public void onBack() {
            }
        });
    }

OK,结束!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/tzl0322/article/details/77840203
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 22:15:18
  • 阅读 ( 1122 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢