Berikut ini caranya, cekidot:
- Buka Eclipse
- Buat android Aplication Project dengan memilih menu File-New-Android aplication Project. Beri nama Application Name sesuai dengan keinginan, Project name dan Package Name akan menyesuaikan.
- Atur Minimum Required SDK (sesuaikan dengan versi device jika di-run dengan HP atau gadget). Target SDK dan Compile with juga diatur versinya.
- Untuk pengaturan theme dibiarkan saja "Holo Light Dark Action Bar".
- Next
- Pada Configure Project, biarkan pengaturannya default. Pilih next
- Dibagian Configure Launcher Icon silahkan setting untuk iconnya. Image file berfungsi untuk meng-set icon dengan image milik sendiri (bukan lambang android). Anda juga dapat menambahkan shape backgroud dan mengatur warnanya sesuai dengan keinginan. Next.
- Pada bagian Cretae activity langsung saja next.
- Blank Activity biarkan saja Activity Name dan Layout Name sesuai defaultnya. Finish.
- Pada bagian MainActivity.java ketik script sebagai berikut :
package com.magiccolor;
import java.util.UUID;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener { private DrawingView drawView;
private ImageButton currPaint, drawBtn, eraseBtn, newBtn, saveBtn;
private float smallBrush, mediumBrush, largeBrush;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawView = (DrawingView)findViewById(R.id.drawing);
LinearLayout paintLayout = (LinearLayout)findViewById(R.id.paint_colors); currPaint = (ImageButton)paintLayout.getChildAt(0); currPaint.setImageDrawable(getResources().getDrawable (R.drawable.paint_pressed));
smallBrush = getResources().getInteger(R.integer.small_size);
mediumBrush = getResources().getInteger(R.integer.medium_size);
largeBrush = getResources().getInteger(R.integer.large_size);
drawBtn = (ImageButton)findViewById(R.id.draw_btn); drawBtn.setOnClickListener(this);
drawView.setBrushSize(mediumBrush);
eraseBtn = (ImageButton)findViewById(R.id.erase_btn); eraseBtn.setOnClickListener(this);
newBtn = (ImageButton)findViewById(R.id.new_btn); newBtn.setOnClickListener(this);
saveBtn = (ImageButton)findViewById(R.id.save_btn); saveBtn.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void paintClicked(View view)
{
drawView.setErase(false); drawView.setBrushSize(drawView.getLastBrushSize());
if(view!=currPaint)
{
ImageButton imgView = (ImageButton)view;
String color = view.getTag().toString();
drawView.setColor(color); imgView.setImageDrawable(getResources().getDrawable (R.drawable.paint_pressed)); currPaint.setImageDrawable(getResources().getDrawable (R.drawable.paint)); currPaint=(ImageButton)view;
}
}
@Override
public void onClick(View view){ if(view.getId()==R.id.draw_btn)
{
final Dialog brushDialog = new Dialog(this);
brushDialog.setTitle("Ukuran Kuas:"); brushDialog.setContentView(R.layout.brush_chooser);
ImageButton smallBtn = (ImageButton)brushDialog.findViewById (R.id.small_brush);
smallBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
drawView.setErase(false);
drawView.setBrushSize(smallBrush);
drawView.setLastBrushSize(smallBrush);
brushDialog.dismiss();
}
});
ImageButton mediumBtn = (ImageButton)brushDialog.findViewById (R.id.medium_brush);
mediumBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
drawView.setErase(false);
drawView.setBrushSize(mediumBrush); drawView.setLastBrushSize(mediumBrush);
brushDialog.dismiss();
}
});
ImageButton largeBtn = (ImageButton)brushDialog.findViewById (R.id.large_brush);
largeBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
drawView.setErase(false);
drawView.setBrushSize(largeBrush);
drawView.setLastBrushSize(largeBrush);
brushDialog.dismiss(); } }); brushDialog.show();
}
else if
(view.getId()==R.id.erase_btn){ final Dialog brushDialog = new Dialog(this); brushDialog.setTitle("Ukuran Penghapus:"); brushDialog.setContentView(R.layout.brush_chooser);
ImageButton smallBtn = (ImageButton)brushDialog.findViewById (R.id.small_brush);
smallBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) { drawView.setErase(true); drawView.setBrushSize(smallBrush);
brushDialog.dismiss();
}
});
ImageButton mediumBtn = (ImageButton)brushDialog.findViewById(R.id.medium_brush); mediumBtn.setOnClickListener(new OnClickListener()
{
@Override public void onClick(View v)
{
drawView.setErase(true);
drawView.setBrushSize(mediumBrush);
brushDialog.dismiss();
}
});
ImageButton largeBtn = (ImageButton)brushDialog.findViewById(R.id.large_brush); largeBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) { drawView.setErase(true); drawView.setBrushSize(largeBrush); brushDialog.dismiss();
}
});
brushDialog.show();
}
else if
(view.getId()==R.id.new_btn)
{
AlertDialog.Builder newDialog = new AlertDialog.Builder(this); newDialog.setTitle("Gambar baru");
newDialog.setMessage("Gambar baru (anda akan kehilangan gambar)?"); newDialog.setPositiveButton("Ya", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
drawView.startNew();
dialog.dismiss();
}
});
newDialog.setNegativeButton("Batal", new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int which)
{ dialog.cancel(); } }); newDialog.show();
}
else if
(view.getId()==R.id.save_btn)
{
AlertDialog.Builder saveDialog = new AlertDialog.Builder(this); saveDialog.setTitle("Simpan Gambar");
saveDialog.setMessage("Anda ingin menyimpan gambar di Galeri?"); saveDialog.setPositiveButton("Ya", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
drawView.setDrawingCacheEnabled(true);
String imgSaved = MediaStore.Images.Media.insertImage( getContentResolver(),drawView.getDrawingCache(), UUID.randomUUID().toString()+".png", "gambar");
if
(imgSaved!=null){ Toast savedToast = Toast.makeText(getApplicationContext(), "Gambar tersimpan di Galeri!", Toast.LENGTH_SHORT);
savedToast.show();
}
else
{
Toast unsavedToast = Toast.makeText(getApplicationContext(), "Oops! Gambar tidak dapat disimpan", Toast.LENGTH_SHORT); unsavedToast.show();
}
drawView.destroyDrawingCache();
}
});
saveDialog.setNegativeButton("Batal", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which){ dialog.cancel();
}
});
saveDialog.show();
}
}
import java.util.UUID;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener { private DrawingView drawView;
private ImageButton currPaint, drawBtn, eraseBtn, newBtn, saveBtn;
private float smallBrush, mediumBrush, largeBrush;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawView = (DrawingView)findViewById(R.id.drawing);
LinearLayout paintLayout = (LinearLayout)findViewById(R.id.paint_colors); currPaint = (ImageButton)paintLayout.getChildAt(0); currPaint.setImageDrawable(getResources().getDrawable (R.drawable.paint_pressed));
smallBrush = getResources().getInteger(R.integer.small_size);
mediumBrush = getResources().getInteger(R.integer.medium_size);
largeBrush = getResources().getInteger(R.integer.large_size);
drawBtn = (ImageButton)findViewById(R.id.draw_btn); drawBtn.setOnClickListener(this);
drawView.setBrushSize(mediumBrush);
eraseBtn = (ImageButton)findViewById(R.id.erase_btn); eraseBtn.setOnClickListener(this);
newBtn = (ImageButton)findViewById(R.id.new_btn); newBtn.setOnClickListener(this);
saveBtn = (ImageButton)findViewById(R.id.save_btn); saveBtn.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void paintClicked(View view)
{
drawView.setErase(false); drawView.setBrushSize(drawView.getLastBrushSize());
if(view!=currPaint)
{
ImageButton imgView = (ImageButton)view;
String color = view.getTag().toString();
drawView.setColor(color); imgView.setImageDrawable(getResources().getDrawable (R.drawable.paint_pressed)); currPaint.setImageDrawable(getResources().getDrawable (R.drawable.paint)); currPaint=(ImageButton)view;
}
}
@Override
public void onClick(View view){ if(view.getId()==R.id.draw_btn)
{
final Dialog brushDialog = new Dialog(this);
brushDialog.setTitle("Ukuran Kuas:"); brushDialog.setContentView(R.layout.brush_chooser);
ImageButton smallBtn = (ImageButton)brushDialog.findViewById (R.id.small_brush);
smallBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
drawView.setErase(false);
drawView.setBrushSize(smallBrush);
drawView.setLastBrushSize(smallBrush);
brushDialog.dismiss();
}
});
ImageButton mediumBtn = (ImageButton)brushDialog.findViewById (R.id.medium_brush);
mediumBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
drawView.setErase(false);
drawView.setBrushSize(mediumBrush); drawView.setLastBrushSize(mediumBrush);
brushDialog.dismiss();
}
});
ImageButton largeBtn = (ImageButton)brushDialog.findViewById (R.id.large_brush);
largeBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
drawView.setErase(false);
drawView.setBrushSize(largeBrush);
drawView.setLastBrushSize(largeBrush);
brushDialog.dismiss(); } }); brushDialog.show();
}
else if
(view.getId()==R.id.erase_btn){ final Dialog brushDialog = new Dialog(this); brushDialog.setTitle("Ukuran Penghapus:"); brushDialog.setContentView(R.layout.brush_chooser);
ImageButton smallBtn = (ImageButton)brushDialog.findViewById (R.id.small_brush);
smallBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) { drawView.setErase(true); drawView.setBrushSize(smallBrush);
brushDialog.dismiss();
}
});
ImageButton mediumBtn = (ImageButton)brushDialog.findViewById(R.id.medium_brush); mediumBtn.setOnClickListener(new OnClickListener()
{
@Override public void onClick(View v)
{
drawView.setErase(true);
drawView.setBrushSize(mediumBrush);
brushDialog.dismiss();
}
});
ImageButton largeBtn = (ImageButton)brushDialog.findViewById(R.id.large_brush); largeBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) { drawView.setErase(true); drawView.setBrushSize(largeBrush); brushDialog.dismiss();
}
});
brushDialog.show();
}
else if
(view.getId()==R.id.new_btn)
{
AlertDialog.Builder newDialog = new AlertDialog.Builder(this); newDialog.setTitle("Gambar baru");
newDialog.setMessage("Gambar baru (anda akan kehilangan gambar)?"); newDialog.setPositiveButton("Ya", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
drawView.startNew();
dialog.dismiss();
}
});
newDialog.setNegativeButton("Batal", new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int which)
{ dialog.cancel(); } }); newDialog.show();
}
else if
(view.getId()==R.id.save_btn)
{
AlertDialog.Builder saveDialog = new AlertDialog.Builder(this); saveDialog.setTitle("Simpan Gambar");
saveDialog.setMessage("Anda ingin menyimpan gambar di Galeri?"); saveDialog.setPositiveButton("Ya", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
drawView.setDrawingCacheEnabled(true);
String imgSaved = MediaStore.Images.Media.insertImage( getContentResolver(),drawView.getDrawingCache(), UUID.randomUUID().toString()+".png", "gambar");
if
(imgSaved!=null){ Toast savedToast = Toast.makeText(getApplicationContext(), "Gambar tersimpan di Galeri!", Toast.LENGTH_SHORT);
savedToast.show();
}
else
{
Toast unsavedToast = Toast.makeText(getApplicationContext(), "Oops! Gambar tidak dapat disimpan", Toast.LENGTH_SHORT); unsavedToast.show();
}
drawView.destroyDrawingCache();
}
});
saveDialog.setNegativeButton("Batal", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which){ dialog.cancel();
}
});
saveDialog.show();
}
}
11.Buat sebuah MainActivity.java lagi. Rubah namanya menjadi DrawingView.java. Ketika script sebagai berikut:
package com.magiccolor;
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.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
public class DrawingView extends View
{
private Path drawPath;
private Paint drawPaint, canvasPaint;
private int paintColor = 0xFF660000;
private Canvas drawCanvas;
private Bitmap canvasBitmap;
private float brushSize, lastBrushSize;
private boolean erase=false;
public DrawingView(Context context, AttributeSet attrs)
{
super(context, attrs);
setupDrawing();
}
private void setupDrawing(){ brushSize = getResources().getInteger(R.integer.medium_size);
lastBrushSize = brushSize; drawPath = new Path();
drawPaint = new Paint();
drawPaint.setColor(paintColor);
drawPaint.setAntiAlias(true);
drawPaint.setStrokeWidth(brushSize); drawPaint.setStyle(Paint.Style.STROKE); drawPaint.setStrokeJoin(Paint.Join.ROUND); drawPaint.setStrokeCap(Paint.Cap.ROUND);
canvasPaint = new Paint(Paint.DITHER_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh);
canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); drawCanvas = new Canvas(canvasBitmap);
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); canvas.drawPath(drawPath, drawPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
float touchX = event.getX();
float touchY = event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN: drawPath.moveTo(touchX, touchY); break;
case MotionEvent.ACTION_MOVE: drawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP: drawPath.lineTo(touchX, touchY); drawCanvas.drawPath(drawPath, drawPaint);
drawPath.reset();
break;
default: return false;
}
invalidate();
return true;
}
public void setColor(String newColor){ invalidate();
paintColor = Color.parseColor(newColor);
drawPaint.setColor(paintColor);
}
public void setBrushSize(float newSize)
{
float pixelAmount = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, newSize, getResources().getDisplayMetrics());
brushSize=pixelAmount;
drawPaint.setStrokeWidth(brushSize);
}
public void setLastBrushSize(float lastSize){ lastBrushSize=lastSize;
}
public float getLastBrushSize()
{
return lastBrushSize;
}
public void setErase(boolean isErase){ erase=isErase;
if
(erase) drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
else drawPaint.setXfermode(null);
}
public void startNew()
{
drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR);
invalidate();
}
} ;
12.Pada Activity-main.xml ketika scipt sebagai berikut : (contoh script silahkan didownload).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.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
public class DrawingView extends View
{
private Path drawPath;
private Paint drawPaint, canvasPaint;
private int paintColor = 0xFF660000;
private Canvas drawCanvas;
private Bitmap canvasBitmap;
private float brushSize, lastBrushSize;
private boolean erase=false;
public DrawingView(Context context, AttributeSet attrs)
{
super(context, attrs);
setupDrawing();
}
private void setupDrawing(){ brushSize = getResources().getInteger(R.integer.medium_size);
lastBrushSize = brushSize; drawPath = new Path();
drawPaint = new Paint();
drawPaint.setColor(paintColor);
drawPaint.setAntiAlias(true);
drawPaint.setStrokeWidth(brushSize); drawPaint.setStyle(Paint.Style.STROKE); drawPaint.setStrokeJoin(Paint.Join.ROUND); drawPaint.setStrokeCap(Paint.Cap.ROUND);
canvasPaint = new Paint(Paint.DITHER_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh);
canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); drawCanvas = new Canvas(canvasBitmap);
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); canvas.drawPath(drawPath, drawPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
float touchX = event.getX();
float touchY = event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN: drawPath.moveTo(touchX, touchY); break;
case MotionEvent.ACTION_MOVE: drawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP: drawPath.lineTo(touchX, touchY); drawCanvas.drawPath(drawPath, drawPaint);
drawPath.reset();
break;
default: return false;
}
invalidate();
return true;
}
public void setColor(String newColor){ invalidate();
paintColor = Color.parseColor(newColor);
drawPaint.setColor(paintColor);
}
public void setBrushSize(float newSize)
{
float pixelAmount = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, newSize, getResources().getDisplayMetrics());
brushSize=pixelAmount;
drawPaint.setStrokeWidth(brushSize);
}
public void setLastBrushSize(float lastSize){ lastBrushSize=lastSize;
}
public float getLastBrushSize()
{
return lastBrushSize;
}
public void setErase(boolean isErase){ erase=isErase;
if
(erase) drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
else drawPaint.setXfermode(null);
}
public void startNew()
{
drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR);
invalidate();
}
} ;
13.Buat sebuah Activity_main.xml lagi dan rubah namanya menjadi brush_chooser. Ketikscript sebagai berikut : (contoh script silahkan didownload).
14. Untuk menambahkan background pada aplikasi paintnya. Maka copy gambar yang telah disiapkan sebagai background lalu paste pada res-drawable-hdpi.
15. Run Aplikasi yang telah dibuat.
Link download script lengkapnya
Sumber: Dari berbagai sumber