Thursday, 31 October 2013
Wednesday, 30 October 2013
Device Art Generator
The device art generator allows you to quickly wrap your app screenshots in real device artwork. This provides better visual context for your app screenshots on your web site or in other promotional materials.
http://developer.android.com/distribute/promote/device-art.html
http://developer.android.com/distribute/promote/device-art.html
Friday, 25 October 2013
Monday, 21 October 2013
Sunday, 20 October 2013
Friday, 18 October 2013
Tuesday, 15 October 2013
Android splash screen logic
new CountDownTimer(2500, 1000) { @Override public void onTick(long millisUntilFinished) { } @Override public void onFinish() { Intent i = new Intent(SplashActivity.this, HomeActivity.class); startActivity(i); SplashActivity.this.finish(); } }.start();
Friday, 11 October 2013
Thursday, 10 October 2013
Multiscreen android application
Download following apk
https://play.google.com/store/apps/details?id=nl.sogeti.android.deviceprofiler&hl=en
and check for particular device and create layout folder.
https://play.google.com/store/apps/details?id=nl.sogeti.android.deviceprofiler&hl=en
and check for particular device and create layout folder.
Wednesday, 9 October 2013
Painting on image.
ColorPicker.java
ColorPickerDialog.java
MainActivity.java
/* * Copyright 2013 Piotr Adamus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.extras; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ComposeShader; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Paint.Join; import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.RadialGradient; import android.graphics.RectF; import android.graphics.Shader.TileMode; import android.graphics.SweepGradient; import android.os.Bundle; import android.os.Parcelable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class ColorPicker extends View { /** * Customizable display parameters (in percents) */ private final int paramOuterPadding = 2; // outer padding of the whole color picker view private final int paramInnerPadding = 5; // distance between value slider wheel and inner color wheel private final int paramValueSliderWidth = 10; // width of the value slider private final int paramArrowPointerSize = 4; // size of the arrow pointer; set to 0 to hide the pointer private Paint colorWheelPaint; private Paint valueSliderPaint; private Paint colorViewPaint; private Paint colorPointerPaint; private RectF colorPointerCoords; private Paint valuePointerPaint; private Paint valuePointerArrowPaint; private RectF outerWheelRect; private RectF innerWheelRect; private Path colorViewPath; private Path valueSliderPath; private Path arrowPointerPath; private Bitmap colorWheelBitmap; private int valueSliderWidth; private int innerPadding; private int outerPadding; private int arrowPointerSize; private int outerWheelRadius; private int innerWheelRadius; private int colorWheelRadius; private Matrix gradientRotationMatrix; /** Currently selected color */ private float[] colorHSV = new float[] { 0f, 0f, 1f }; public ColorPicker(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public ColorPicker(Context context, AttributeSet attrs) { super(context, attrs); init(); } public ColorPicker(Context context) { super(context); init(); } private void init() { colorPointerPaint = new Paint(); colorPointerPaint.setStyle(Style.STROKE); colorPointerPaint.setStrokeWidth(2f); colorPointerPaint.setARGB(128, 0, 0, 0); valuePointerPaint = new Paint(); valuePointerPaint.setStyle(Style.STROKE); valuePointerPaint.setStrokeWidth(2f); valuePointerArrowPaint = new Paint(); colorWheelPaint = new Paint(); colorWheelPaint.setAntiAlias(true); colorWheelPaint.setDither(true); valueSliderPaint = new Paint(); valueSliderPaint.setAntiAlias(true); valueSliderPaint.setDither(true); colorViewPaint = new Paint(); colorViewPaint.setAntiAlias(true); colorViewPath = new Path(); valueSliderPath = new Path(); arrowPointerPath = new Path(); outerWheelRect = new RectF(); innerWheelRect = new RectF(); colorPointerCoords = new RectF(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int size = Math.min(widthSize, heightSize); setMeasuredDimension(size, size); } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { int centerX = getWidth() / 2; int centerY = getHeight() / 2; // drawing color wheel canvas.drawBitmap(colorWheelBitmap, centerX - colorWheelRadius, centerY - colorWheelRadius, null); // drawing color view colorViewPaint.setColor(Color.HSVToColor(colorHSV)); canvas.drawPath(colorViewPath, colorViewPaint); // drawing value slider float[] hsv = new float[] { colorHSV[0], colorHSV[1], 1f }; SweepGradient sweepGradient = new SweepGradient(centerX, centerY, new int[] { Color.BLACK, Color.HSVToColor(hsv), Color.WHITE }, null); sweepGradient.setLocalMatrix(gradientRotationMatrix); valueSliderPaint.setShader(sweepGradient); canvas.drawPath(valueSliderPath, valueSliderPaint); // drawing color wheel pointer float hueAngle = (float) Math.toRadians(colorHSV[0]); int colorPointX = (int) (-Math.cos(hueAngle) * colorHSV[1] * colorWheelRadius) + centerX; int colorPointY = (int) (-Math.sin(hueAngle) * colorHSV[1] * colorWheelRadius) + centerY; float pointerRadius = 0.075f * colorWheelRadius; int pointerX = (int) (colorPointX - pointerRadius / 2); int pointerY = (int) (colorPointY - pointerRadius / 2); colorPointerCoords.set(pointerX, pointerY, pointerX + pointerRadius, pointerY + pointerRadius); canvas.drawOval(colorPointerCoords, colorPointerPaint); // drawing value pointer valuePointerPaint.setColor(Color.HSVToColor(new float[] { 0f, 0f, 1f - colorHSV[2] })); double valueAngle = (colorHSV[2] - 0.5f) * Math.PI; float valueAngleX = (float) Math.cos(valueAngle); float valueAngleY = (float) Math.sin(valueAngle); canvas.drawLine(valueAngleX * innerWheelRadius + centerX, valueAngleY * innerWheelRadius + centerY, valueAngleX * outerWheelRadius + centerX, valueAngleY * outerWheelRadius + centerY, valuePointerPaint); // drawing pointer arrow if (arrowPointerSize > 0) { drawPointerArrow(canvas); } } private void drawPointerArrow(Canvas canvas) { int centerX = getWidth() / 2; int centerY = getHeight() / 2; double tipAngle = (colorHSV[2] - 0.5f) * Math.PI; double leftAngle = tipAngle + Math.PI / 96; double rightAngle = tipAngle - Math.PI / 96; double tipAngleX = Math.cos(tipAngle) * outerWheelRadius; double tipAngleY = Math.sin(tipAngle) * outerWheelRadius; double leftAngleX = Math.cos(leftAngle) * (outerWheelRadius + arrowPointerSize); double leftAngleY = Math.sin(leftAngle) * (outerWheelRadius + arrowPointerSize); double rightAngleX = Math.cos(rightAngle) * (outerWheelRadius + arrowPointerSize); double rightAngleY = Math.sin(rightAngle) * (outerWheelRadius + arrowPointerSize); arrowPointerPath.reset(); arrowPointerPath.moveTo((float) tipAngleX + centerX, (float) tipAngleY + centerY); arrowPointerPath.lineTo((float) leftAngleX + centerX, (float) leftAngleY + centerY); arrowPointerPath.lineTo((float) rightAngleX + centerX, (float) rightAngleY + centerY); arrowPointerPath.lineTo((float) tipAngleX + centerX, (float) tipAngleY + centerY); valuePointerArrowPaint.setColor(Color.HSVToColor(colorHSV)); valuePointerArrowPaint.setStyle(Style.FILL); canvas.drawPath(arrowPointerPath, valuePointerArrowPaint); valuePointerArrowPaint.setStyle(Style.STROKE); valuePointerArrowPaint.setStrokeJoin(Join.ROUND); valuePointerArrowPaint.setColor(Color.BLACK); canvas.drawPath(arrowPointerPath, valuePointerArrowPaint); } @Override protected void onSizeChanged(int width, int height, int oldw, int oldh) { int centerX = width / 2; int centerY = height / 2; innerPadding = (int) (paramInnerPadding * width / 100); outerPadding = (int) (paramOuterPadding * width / 100); arrowPointerSize = (int) (paramArrowPointerSize * width / 100); valueSliderWidth = (int) (paramValueSliderWidth * width / 100); outerWheelRadius = width / 2 - outerPadding - arrowPointerSize; innerWheelRadius = outerWheelRadius - valueSliderWidth; colorWheelRadius = innerWheelRadius - innerPadding; outerWheelRect.set(centerX - outerWheelRadius, centerY - outerWheelRadius, centerX + outerWheelRadius, centerY + outerWheelRadius); innerWheelRect.set(centerX - innerWheelRadius, centerY - innerWheelRadius, centerX + innerWheelRadius, centerY + innerWheelRadius); colorWheelBitmap = createColorWheelBitmap(colorWheelRadius * 2, colorWheelRadius * 2); gradientRotationMatrix = new Matrix(); gradientRotationMatrix.preRotate(270, width / 2, height / 2); colorViewPath.arcTo(outerWheelRect, 270, -180); colorViewPath.arcTo(innerWheelRect, 90, 180); valueSliderPath.arcTo(outerWheelRect, 270, 180); valueSliderPath.arcTo(innerWheelRect, 90, -180); } private Bitmap createColorWheelBitmap(int width, int height) { Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); int colorCount = 12; int colorAngleStep = 360 / 12; int colors[] = new int[colorCount + 1]; float hsv[] = new float[] { 0f, 1f, 1f }; for (int i = 0; i < colors.length; i++) { hsv[0] = (i * colorAngleStep + 180) % 360; colors[i] = Color.HSVToColor(hsv); } colors[colorCount] = colors[0]; SweepGradient sweepGradient = new SweepGradient(width / 2, height / 2, colors, null); RadialGradient radialGradient = new RadialGradient(width / 2, height / 2, colorWheelRadius, 0xFFFFFFFF, 0x00FFFFFF, TileMode.CLAMP); ComposeShader composeShader = new ComposeShader(sweepGradient, radialGradient, PorterDuff.Mode.SRC_OVER); colorWheelPaint.setShader(composeShader); Canvas canvas = new Canvas(bitmap); canvas.drawCircle(width / 2, height / 2, colorWheelRadius, colorWheelPaint); return bitmap; } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: int x = (int) event.getX(); int y = (int) event.getY(); int cx = x - getWidth() / 2; int cy = y - getHeight() / 2; double d = Math.sqrt(cx * cx + cy * cy); if (d <= colorWheelRadius) { colorHSV[0] = (float) (Math.toDegrees(Math.atan2(cy, cx)) + 180f); colorHSV[1] = Math.max(0f, Math.min(1f, (float) (d / colorWheelRadius))); invalidate(); } else if (x >= getWidth() / 2 && d >= innerWheelRadius) { colorHSV[2] = (float) Math.max(0, Math.min(1, Math.atan2(cy, cx) / Math.PI + 0.5f)); invalidate(); } return true; } return super.onTouchEvent(event); } public void setColor(int color) { Color.colorToHSV(color, colorHSV); } public int getColor() { return Color.HSVToColor(colorHSV); } @Override protected Parcelable onSaveInstanceState() { Bundle state = new Bundle(); state.putFloatArray("color", colorHSV); state.putParcelable("super", super.onSaveInstanceState()); return state; } @Override protected void onRestoreInstanceState(Parcelable state) { if (state instanceof Bundle) { Bundle bundle = (Bundle) state; colorHSV = bundle.getFloatArray("color"); super.onRestoreInstanceState(bundle.getParcelable("super")); } else { super.onRestoreInstanceState(state); } } }
package com.extras; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; public class ColorPickerDialog extends AlertDialog { private ColorPicker colorPickerView; private final OnColorSelectedListener onColorSelectedListener; public ColorPickerDialog(Context context, int initialColor, OnColorSelectedListener onColorSelectedListener) { super(context); this.onColorSelectedListener = onColorSelectedListener; RelativeLayout relativeLayout = new RelativeLayout(context); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); colorPickerView = new ColorPicker(context); colorPickerView.setColor(initialColor); relativeLayout.addView(colorPickerView, layoutParams); setButton(BUTTON_POSITIVE, context.getString(android.R.string.ok), onClickListener); setButton(BUTTON_NEGATIVE, context.getString(android.R.string.cancel), onClickListener); setView(relativeLayout); } private OnClickListener onClickListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case BUTTON_POSITIVE: int selectedColor = colorPickerView.getColor(); onColorSelectedListener.onColorSelected(selectedColor); break; case BUTTON_NEGATIVE: dialog.dismiss(); break; } } }; public interface OnColorSelectedListener { public void onColorSelected(int color); } }
package com.example.aandroidcolorpickertest; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.os.Bundle; import android.util.AttributeSet; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.extras.ColorPickerDialog.OnColorSelectedListener; public class MainActivity extends Activity { RelativeLayout rel; public static Bitmap mBitmap; public static Bitmap photoBitmap, tempBitmap; public static Paint mPaint; public static Display display; public static MyView myView; LinearLayout linearColors; RelativeLayout mainContainer; private boolean menuBoolean = true; Button btnPicker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rel = (RelativeLayout)findViewById(R.id.relative); btnPicker = (Button)findViewById(R.id.picker); display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); myView = new MyView(this); display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); // Setting mPaint mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setColor(0xFFFF0000); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(7); RelativeLayout.LayoutParams relt = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); rel.addView(new MyView(this), relt); btnPicker.bringToFront(); } public void PickColor(View v){ com.extras.ColorPickerDialog colorPickerDialog = new com.extras.ColorPickerDialog(this, 16777215, new OnColorSelectedListener() { @Override public void onColorSelected(int color) { mPaint.setXfermode(null); // Edited By Shreyash mPaint.setAlpha(0xFF); // Edited By Shreyash mPaint.setColor(color); } }); colorPickerDialog.show(); } // MyView Class Started ---------------------------------------------- public class MyView extends View { // private static final float MINP = 0.25f; // private static final float MAXP = 0.75f; private static final float TOUCH_TOLERANCE = 4; private Canvas mCanvas; private Path mPath; private Paint mBitmapPaint; private float mX, mY; public MyView(Context c) { super(c); mBitmap = Bitmap.createBitmap(display.getWidth(), display.getHeight(), Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mBitmap); mPath = new Path(); mBitmapPaint = new Paint(Paint.DITHER_FLAG); // float minZoom = Math.min(display.getWidth()/(float)mBitmap.getWidth(), (display.getHeight())/(float)(mBitmap.getHeight())); // client code // matrix.postScale(minZoom, minZoom, display.getWidth()/2, display.getHeight()/2); // client code } public MyView(Context c, AttributeSet atrs) { super(c, atrs); mBitmap = Bitmap.createBitmap(display.getWidth(), display.getHeight(), Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mBitmap); mPath = new Path(); mBitmapPaint = new Paint(Paint.DITHER_FLAG); // float minZoom = Math.min(display.getWidth()/(float)mBitmap.getWidth(), (display.getHeight())/(float)(mBitmap.getHeight())); // client code // matrix.postScale(minZoom, minZoom, display.getWidth()/2, display.getHeight()/2); // client code } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { // set the Canvas Color // canvas.drawColor(Color.BLACK); // edited by Shreyash canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); // ORIGINAL canvas.drawPath(mPath, mPaint); } 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; } } private void touch_up() { mPath.lineTo(mX, mY); // 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(); //mCanvas.drawPath(mPath, mPaint); // edited by shreyash //hide the menu if (menuBoolean) { // hideMenuFunction(); } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y); invalidate(); mCanvas.drawPath(mPath, mPaint); // edited by shreyash break; case MotionEvent.ACTION_MOVE: touch_move(x, y); invalidate(); mCanvas.drawPath(mPath, mPaint); // edited by shreyash break; case MotionEvent.ACTION_UP: touch_up(); invalidate(); break; } return true; } } // MyView Class Ended }
Subscribe to:
Posts (Atom)