Guest User

Untitled

a guest
May 22nd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.48 KB | None | 0 0
  1. package com.pumba22.paintexample;
  2.  
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.graphics.*;
  6. import android.os.Bundle;
  7. import android.view.Menu;
  8. import android.view.MenuItem;
  9. import android.view.MotionEvent;
  10. import android.view.View;
  11.  
  12. public class PaintActivity extends Activity implements ColorPickDialog.OnColorChangedListener {
  13.  
  14.     private Paint mPaint;
  15.  
  16.     @Override
  17.     protected void onCreate(Bundle savedInstanceState) {
  18.         super.onCreate(savedInstanceState);
  19.         setContentView(new PaintView(this));
  20.  
  21.         mPaint = new Paint();
  22.         mPaint.setAntiAlias(true);
  23.         mPaint.setDither(true);
  24.         mPaint.setColor(0xFF000000);
  25.         mPaint.setStyle(Paint.Style.STROKE);
  26.         mPaint.setStrokeJoin(Paint.Join.ROUND);
  27.         mPaint.setStrokeCap(Paint.Cap.ROUND);
  28.         mPaint.setStrokeWidth(12);
  29.     }
  30.  
  31.     public void colorChanged(int color){
  32.         mPaint.setColor(color);
  33.     }
  34.  
  35.     class PaintView extends View {
  36.  
  37.         private Bitmap mBitmap;
  38.         private Canvas mCanvas;
  39.         private Path mPath;
  40.         private Paint mBitmapPaint;
  41.  
  42.         public PaintView(Context context) {
  43.             super(context);
  44.  
  45.             mPath = new Path();
  46.             mBitmapPaint = new Paint(Paint.DITHER_FLAG);
  47.         }
  48.  
  49.         @Override
  50.         protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  51.             super.onSizeChanged(w, h, oldw, oldh);
  52.  
  53.             mBitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
  54.             mCanvas = new Canvas(mBitmap);
  55.  
  56.         }
  57.  
  58.         @Override
  59.         protected void onDraw(Canvas canvas) {
  60.  
  61.             canvas.drawColor(0xFFAAAAAA);
  62.  
  63.             canvas.drawBitmap(mBitmap, 0, 0,mBitmapPaint);
  64.  
  65.             canvas.drawPath(mPath, mPaint);
  66.  
  67.         }
  68.  
  69.         private float mX, mY;
  70.         private static final float TOUCH_TOLERANCE = 4;
  71.  
  72.         private void touch_start(float x, float y){
  73.             mPath.reset();
  74.             mPath.moveTo(x, y);
  75.             mX = x;
  76.             mY = y;
  77.         }
  78.  
  79.         private void touch_move(float x, float y){
  80.             float dx = Math.abs(x-mX);
  81.             float dy = Math.abs(y-mY);
  82.             if (dx>=TOUCH_TOLERANCE || dy>= TOUCH_TOLERANCE){
  83.                 mPath.quadTo(mX, mY, (x+mX)/2, (y+mY)/2);
  84.                 mX = x;
  85.                 mY = y;
  86.             }
  87.         }
  88.  
  89.         private void touch_up(){
  90.             mPath.lineTo(mX,mY);
  91.             mCanvas.drawPath(mPath, mPaint);
  92.             mPath.reset();
  93.         }
  94.  
  95.         @Override
  96.         public boolean onTouchEvent(MotionEvent event) {
  97.             float x = event.getX();
  98.             float y = event.getY();
  99.  
  100.             switch (event.getAction()){
  101.             case MotionEvent.ACTION_DOWN:
  102.                 touch_start(x,y);
  103.                 invalidate();
  104.                 break;
  105.             case MotionEvent.ACTION_MOVE:
  106.                 touch_move(x, y);
  107.                 invalidate();
  108.                 break;
  109.             case MotionEvent.ACTION_UP:
  110.                 touch_up();
  111.                 invalidate();
  112.                 break;
  113.             }
  114.  
  115.             return true;
  116.         }
  117.  
  118.     }
  119.    
  120.     private static final int COLOR_MENU_ID = Menu.FIRST;
  121.     private static final int ERASE_MENU_ID = Menu.FIRST+1;
  122.  
  123.     @Override
  124.     public boolean onCreateOptionsMenu(Menu menu) {
  125.         super.onCreateOptionsMenu(menu);
  126.        
  127.         menu.add(0,COLOR_MENU_ID,0,"Color").setShortcut('3', 'c');
  128.         menu.add(0, ERASE_MENU_ID, 0, "Erase").setShortcut('5', 'z');
  129.        
  130.         return true;
  131.     }
  132.  
  133.     @Override
  134.     public boolean onPrepareOptionsMenu(Menu menu) {
  135.         return super.onPrepareOptionsMenu(menu);
  136.     }
  137.    
  138.    
  139.     @Override
  140.     public boolean onOptionsItemSelected(MenuItem item) {
  141.        
  142.         mPaint.setXfermode(null);
  143.         mPaint.setAlpha(0xFF);
  144.        
  145.         switch (item.getItemId()) {
  146.         case COLOR_MENU_ID:
  147.                 new ColorPickDialog(this,this, mPaint.getColor()).show();
  148.                 return true;
  149.         case ERASE_MENU_ID:
  150.                 mPaint.setXfermode(new PorterDuffXfermode(
  151.                         PorterDuff.Mode.CLEAR));
  152.                 return true;
  153.         }
  154.        
  155.         return super.onOptionsItemSelected(item);
  156.     }
  157.  
  158.    
  159.    
  160.  
  161.  
  162.    
  163.  
  164. }
Add Comment
Please, Sign In to add comment