studio parsecolor from color black java android colors paint

java - parsecolor - Selector de color de Android para ser incluido en la actividad



colors.xml android (3)

Tu clase debería implementar ColorPickerDialog.OnColorChangedListener

public class MainActivity implements ColorPickerDialog.OnColorChangedListener { private Paint mPaint; mPaint = new Paint(); // on button click new ColorPickerDialog(this, this, mPaint.getColor()).show(); }

Cuadro de diálogo ColorPicker

public class ColorPickerDialog extends Dialog { public interface OnColorChangedListener { void colorChanged(int color); } 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"); }

Debes elegir el color y hacer clic en el círculo central para elegir el color. Establezca el color de su objeto de pintura y use el mismo para dibujar.

Disparo rápido

Editar 2:

El código fuente se puede encontrar en https://code.google.com/p/android-color-picker/

Otro ColorPickerDialog

public class ColorPickerDialog extends AlertDialog implements ColorPickerView.OnColorChangedListener { private ColorPickerView mColorPicker; private ColorPanelView mOldColor; private ColorPanelView mNewColor; private OnColorChangedListener mListener; public ColorPickerDialog(Context myDrawingMenuOptionEventsListener, int initialColor) { super(myDrawingMenuOptionEventsListener); init(initialColor); } private void init(int color) { // To fight color branding. getWindow().setFormat(PixelFormat.RGBA_8888); setUp(color); } private void setUp(int color) { LayoutInflater inflater = (LayoutInflater) getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.dialog_color_picker, null); layout.setBackgroundColor(Color.WHITE); setView(layout); setTitle("Choose a Color"); // setIcon(android.R.drawable.ic_dialog_info); mColorPicker = (ColorPickerView) layout .findViewById(R.id.color_picker_view); mOldColor = (ColorPanelView) layout.findViewById(R.id.old_color_panel); mNewColor = (ColorPanelView) layout.findViewById(R.id.new_color_panel); ((LinearLayout) mOldColor.getParent()).setPadding(Math .round(mColorPicker.getDrawingOffset()), 0, Math .round(mColorPicker.getDrawingOffset()), 0); mColorPicker.setOnColorChangedListener(this); mOldColor.setColor(color); mColorPicker.setColor(color, true); } @Override public void onColorChanged(int color) { mNewColor.setColor(color); if (mListener != null) { mListener.onColorChanged(color); } } public void setAlphaSliderVisible(boolean visible) { mColorPicker.setAlphaSliderVisible(visible); } public int getColor() { return mColorPicker.getColor(); } }

Uso:

final ColorPickerDialog d= new ColorPickerDialog(ActivityName.this,0xffffffff); d.setAlphaSliderVisible(true); d.setButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mPaint.setColor(d.getColor()); } }); d.setButton2("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); d.show();

Toma instantánea:

En lo anterior, elija el color en la barra derecha. También puede elegir qué tan oscuro o claro debe ser el color elegido. Haga clic en Aceptar para establecer la pintura en su objeto de pintura y use la misma para dibujar. Cancelar desactivará el cuadro de diálogo del selector de color.

Editar 3:

Solo cambiar en lugar de borrar la función. He añadido el selector de color al hacer clic en el botón Borrar.

public class MainActivity extends Activity implements ColorPickerDialog.OnColorChangedListener { DrawingView dv ; RelativeLayout rl; private Paint mPaint; private MaskFilter mEmboss; private MaskFilter mBlur; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dv = new DrawingView(this); setContentView(R.layout.activity_main); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setColor(Color.GREEN); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(12); rl = (RelativeLayout) findViewById(R.id.rl); rl.addView(dv); Button b = (Button) findViewById(R.id.button1); //b.setText(R.string.France); Button b1 = (Button) findViewById(R.id.button2); rl.setDrawingCacheEnabled(true); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // dv.clear(); new ColorPickerDialog(MainActivity.this, MainActivity.this, mPaint.getColor()).show(); } }); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub AlertDialog.Builder editalert = new AlertDialog.Builder(MainActivity.this); editalert.setTitle("Please Enter the name with which you want to Save"); final EditText input = new EditText(MainActivity.this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); input.setLayoutParams(lp); editalert.setView(input); editalert.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { rl.setDrawingCacheEnabled(true); String name= input.getText().toString(); Bitmap bitmap =rl.getDrawingCache(); String root = Environment.getExternalStorageDirectory().toString(); File myDir = new File(root + "/MyDraw"); myDir.mkdirs(); File file = new File (myDir, name+".png"); if (file.exists ()) file.delete (); try { if(!file.exists()) { file.createNewFile(); } FileOutputStream ostream = new FileOutputStream(file); bitmap.compress(CompressFormat.PNG, 10, ostream); // System.out.println("saving......................................................"+path); ostream.close(); rl.invalidate(); } catch (Exception e) { e.printStackTrace(); }finally { rl.setDrawingCacheEnabled(false); } } }); editalert.show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public class DrawingView extends View { private static final float MINP = 0.25f; private static final float MAXP = 0.75f; private Bitmap mBitmap; private Canvas mCanvas; private Path mPath; private Paint mBitmapPaint; Context context; private Paint circlePaint; private Path circlePath; public DrawingView(Context c) { super(c); context=c; mPath = new Path(); mBitmapPaint = new Paint(Paint.DITHER_FLAG); circlePaint = new Paint(); circlePath = new Path(); circlePaint.setAntiAlias(true); circlePaint.setColor(Color.BLUE); circlePaint.setStyle(Paint.Style.STROKE); circlePaint.setStrokeJoin(Paint.Join.MITER); circlePaint.setStrokeWidth(4f); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mBitmap); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, mPaint); canvas.drawPath(circlePath, circlePaint); } private float mX, mY; private static final float TOUCH_TOLERANCE = 4; private void touch_start(float x, float y) { mPath.reset(); mPath.moveTo(x, y); mX = x; mY = y; } private void touch_move(float x, float y) { float dx = Math.abs(x - mX); float dy = Math.abs(y - mY); if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); mX = x; mY = y; circlePath.reset(); circlePath.addCircle(mX, mY, 30, Path.Direction.CW); invalidate(); } } private void touch_up() { mPath.lineTo(mX, mY); circlePath.reset(); // commit the path to our offscreen mCanvas.drawPath(mPath, mPaint); // kill this so we don''t double draw mPath.reset(); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y); invalidate(); break; case MotionEvent.ACTION_MOVE: touch_move(x, y); invalidate(); break; case MotionEvent.ACTION_UP: touch_up(); invalidate(); break; } return true; } } @Override public void colorChanged(int color) { // TODO Auto-generated method stub mPaint.setColor(color); } }

Me gustaría incluir un selector de color en mi programa de pintura. Entonces, si alguien aquí ya ha hecho algo así, por favor, denme algunos tutoriales o un código para comenzar. Realmente necesito tener la idea de agregar esto. Ya configuré el lienzo para el dibujo, así que me gustaría agregarle el selector de color. Cualquier idea es bienvenida. Gracias.



Utilicé este enlace para el selector de color http://code.google.com/p/android-color-picker/ pasos:

He agregado un archivo adicional (como: "android-mvn-push.gradle"). Puede omitir ese archivo en el paso 3 y también eliminar este "apply from: ''../android-mvn-push.gradle''" de su archivo bulid.gradle (Module: liabrary) si se salta el paso 3.

  1. Vaya al enlace de arriba y descargue el proyecto como archivo zip y extraiga el archivo zip.

  2. Dentro de la carpeta Extraído verá la carpeta de la biblioteca.

  3. Copie esa carpeta en su carpeta principal de Aplicaciones Android donde contiene todo su gradle n all ... y también copie el archivo "android-mvn-push.gradle" a su carpeta principal del proyecto.

  4. Abra bulid.gradle (Módulo: aplicación) dentro de esa agregación de dependencias como esta, "compile project ('': library'')"

  5. ajustes de actualización. Grabar con include '': app'', '': library''

  6. vaya a Herramientas> Android> Sincronizar con Gradles y luego mostrará algún error como construir gradle que no coincida con bla bla ....

  7. Haga clic en la opción de abrir archivo de error.

  8. En tu bulid.gradle (Módulo: liabrary) cambia esto,

    aplicar el complemento: ''com.android.library''

android {compileSdkVersion propCompileSdkVersion buildToolsVersion propBuildToolsVersion

defaultConfig { minSdkVersion propMinSdkVersion targetSdkVersion propTargetSdkVersion versionCode propVersionCode versionName propVersionName } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } }

}

aplicar desde: ''../android-mvn-push.gradle''

Para >>>>>>>>>>>

apply plugin: ''com.android.library''

android {compileSdkVersion 22 buildToolsVersion "22.0.1"

defaultConfig { minSdkVersion 14 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } }

} aplicar desde: ''../android-mvn-push.gradle''

Finalmente Herramientas> Android> Sincronización con gradle ... y Bingo ... ¡Funciona ... !!!