android paint 颜色,android 颜色选择器

package com.example.android8;

import color.ColorPickerDialog;

import color.ColorPickerDialog.OnColorChangedListener;

import android.os.Bundle;

import android.app.Activity;

import android.graphics.Color;

import android.graphics.Paint;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

public class SelectColor extends Activity

{

private ColorPickerDialog.OnColorChangedListener change;

private Paint mPaint;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.select_color);

init();

Button b = (Button) findViewById(R.id.button1);

b.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View v)

{

new ColorPickerDialog(SelectColor.this,change , Color.RED).show();

}

});

}

public void init()

{

mPaint=new Paint();

change=new OnColorChangedListener()

{

@Override

public void colorChanged(int color)

{

mPaint.setColor(color);

TextView t=(TextView) findViewById(R.id.textView1);

t.setTextColor(mPaint.getColor());

t.setText("您选择的颜色是:"+mPaint.getColor());

}

};

}

}

package color;

import android.os.Bundle;

import android.app.Dialog;

import android.content.Context;

import android.graphics.*;

import android.view.MotionEvent;

import android.view.View;

public class ColorPickerDialog extends Dialog {

public interface OnColorChangedListener {

void colorChanged(int color);

}

public ColorPickerDialog(Context context)

{

super(context);

}

private OnColorChangedListener mListener;

private int mInitialColor;

private static class ColorPickerView extends View {

private Paint mPaint;

private Paint mCenterPaint;

private final int[] mColors;

private OnColorChangedListener mListener;

ColorPickerView(Context c, OnColorChangedListener l, int color) {

super(c);

mListener = l;

mColors = new int[] {

0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00,

0xFFFFFF00, 0xFFFF0000

};

Shader s = new SweepGradient(0, 0, mColors, null);

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mPaint.setShader(s);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(32);

mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mCenterPaint.setColor(color);

mCenterPaint.setStrokeWidth(5);

}

private boolean mTrackingCenter;

private boolean mHighlightCenter;

@Override

protected void onDraw(Canvas canvas) {

float r = CENTER_X - mPaint.getStrokeWidth()*0.5f;

canvas.translate(CENTER_X, CENTER_X);

canvas.drawOval(new RectF(-r, -r, r, r), mPaint);

canvas.drawCircle(0, 0, CENTER_RADIUS, mCenterPaint);

if (mTrackingCenter) {

int c = mCenterPaint.getColor();

mCenterPaint.setStyle(Paint.Style.STROKE);

if (mHighlightCenter) {

mCenterPaint.setAlpha(0xFF);

} else {

mCenterPaint.setAlpha(0x80);

}

canvas.drawCircle(0, 0,

CENTER_RADIUS + mCenterPaint.getStrokeWidth(),

mCenterPaint);

mCenterPaint.setStyle(Paint.Style.FILL);

mCenterPaint.setColor(c);

}

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

setMeasuredDimension(CENTER_X*2, CENTER_Y*2);

}

private static final int CENTER_X = 100;

private static final int CENTER_Y = 100;

private static final int CENTER_RADIUS = 32;

private int floatToByte(float x) {

int n = java.lang.Math.round(x);

return n;

}

private int pinToByte(int n) {

if (n < 0) {

n = 0;

} else if (n > 255) {

n = 255;

}

return n;

}

private int ave(int s, int d, float p) {

return s + java.lang.Math.round(p * (d - s));

}

private int interpColor(int colors[], float unit) {

if (unit <= 0) {

return colors[0];

}

if (unit >= 1) {

return colors[colors.length - 1];

}

float p = unit * (colors.length - 1);

int i = (int)p;

p -= i;

// now p is just the fractional part [0...1) and i is the index

int c0 = colors[i];

int c1 = colors[i+1];

int a = ave(Color.alpha(c0), Color.alpha(c1), p);

int r = ave(Color.red(c0), Color.red(c1), p);

int g = ave(Color.green(c0), Color.green(c1), p);

int b = ave(Color.blue(c0), Color.blue(c1), p);

return Color.argb(a, r, g, b);

}

private int rotateColor(int color, float rad) {

float deg = rad * 180 / 3.1415927f;

int r = Color.red(color);

int g = Color.green(color);

int b = Color.blue(color);

ColorMatrix cm = new ColorMatrix();

ColorMatrix tmp = new ColorMatrix();

cm.setRGB2YUV();

tmp.setRotate(0, deg);

cm.postConcat(tmp);

tmp.setYUV2RGB();

cm.postConcat(tmp);

final float[] a = cm.getArray();

int ir = floatToByte(a[0] * r +  a[1] * g +  a[2] * b);

int ig = floatToByte(a[5] * r +  a[6] * g +  a[7] * b);

int ib = floatToByte(a[10] * r + a[11] * g + a[12] * b);

return Color.argb(Color.alpha(color), pinToByte(ir),

pinToByte(ig), pinToByte(ib));

}

private static final float PI = 3.1415926f;

@Override

public boolean onTouchEvent(MotionEvent event) {

float x = event.getX() - CENTER_X;

float y = event.getY() - CENTER_Y;

boolean inCenter = java.lang.Math.sqrt(x*x + y*y) <= CENTER_RADIUS;

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

mTrackingCenter = inCenter;

if (inCenter) {

mHighlightCenter = true;

invalidate();

break;

}

case MotionEvent.ACTION_MOVE:

if (mTrackingCenter) {

if (mHighlightCenter != inCenter) {

mHighlightCenter = inCenter;

invalidate();

}

} else {

float angle = (float)java.lang.Math.atan2(y, x);

// need to turn angle [-PI ... PI] into unit [0....1]

float unit = angle/(2*PI);

if (unit < 0) {

unit += 1;

}

mCenterPaint.setColor(interpColor(mColors, unit));

invalidate();

}

break;

case MotionEvent.ACTION_UP:

if (mTrackingCenter) {

if (inCenter) {

mListener.colorChanged(mCenterPaint.getColor());

}

mTrackingCenter = false;  // so we draw w/o halo

invalidate();

}

break;

}

return true;

}

}

public ColorPickerDialog(Context context,

OnColorChangedListener listener,

int initialColor) {

super(context);

mListener = listener;

mInitialColor = initialColor;

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

OnColorChangedListener l = new OnColorChangedListener() {

public void colorChanged(int color) {

mListener.colorChanged(color);

dismiss();

}

};

setContentView(new ColorPickerView(getContext(), l, mInitialColor));

setTitle("Pick a Color");

}

}03427f492f1f5e91dc9b626b290b2a57.png

6e6185e73394f5c2e8446db7eeac9a95.png

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".SelectColor" >

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

android:text="Button" />

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_above="@+id/button1"

android:layout_centerHorizontal="true"

android:layout_marginBottom="40dp"

android:text="TextView" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值