2017-08-15 2 views
0

Je suis en train de tester la démo de Fingerpaint à partir de l'exemple sdk. Bien sûr, cela fonctionne parfaitement, mais je suppose, est-il possible de le faire fonctionner uniquement sur la moitié de l'écran, donc je peux mettre des boutons ou des images sur l'autre moitié? Si ce n'est pas possible je vais juste mettre l'image comme toile de fond de cette toile mais je cherche une autre solution.Fingerpainting sur une moitié de l'écran

public class MainActivity extends Activity { 

DrawingView dv ; 
private Paint mPaint;  

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dv = new DrawingView(this); 
    setContentView(dv); 
    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); 
} 

public class DrawingView extends View { 

    public int width; 
    public int height; 
    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); 
     } 
    } 

    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; 
    } 
} 
} 

Je sais qu'il est possible de tirer parti de imageview en le définissant comme une image bitmap afin que je puisse contrôler la taille de la toile, mais je ne sais pas comment je peux l'utiliser en cas d'empreintes digitales

ImageView img; 
Button top; 
Paint paint = new Paint(); 
Bitmap bmp = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(bmp); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

img = (ImageView) findViewById(R.id.img); 
top = (Button) findViewById(R.id.top); 


top.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 

     paint.setAntiAlias(true); 

     paint.setColor(Color.BLACK); 
     paint.setStrokeWidth(25); 
     canvas.drawLine(100,100,200,100,paint); 
     img.setImageBitmap(bmp); 
    } 
}); 

Répondre

0

I ne sais rien au sujet de la bibliothèque, mais j'essayer de créer une mise en page XML quelque chose comme ceci:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:orientation="vertical" android:gravity="center_horizontal"> 

    <LinearLayout 
     android:layout_width="match_parent" android:layout_height="wrap_content" 

    <!-- Whatever layout you want with buttons and such --> 

    </LinearLayout> 

    <LinearLayout id="@+id/container 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 
</LinearLayout> 

Puis dans votre code:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.layout_file_name); 

dv = new DrawingView(this); 
mPaint = new Paint(); 
// Set up DrawingView 

ViewGroup container = (ViewGroup) findViewById(R.id.container); 
container.addView(dv); 
+0

J'ai essayé de faire quelque chose de similaire à votre code mais ça ne fonctionne pas – AidanSalvatore

+0

Que voulez-vous dire par "ne fonctionne pas"? – nasch

+0

il ne résout pas le problème, fingerpainting est toujours disponible sur chaque partie de l'écran, même si vous changez la taille du conteneur, je pense que cela dépend des poids de mise en page, mais il faut une autre solution – AidanSalvatore