2017-08-15 2 views
0

Ich teste Fingerpaint Demo aus der SDK Probe. Natürlich funktioniert es perfekt, aber ich schätze, gibt es einen Weg, es nur auf der Hälfte des Bildschirms arbeiten zu lassen, also kann ich Buttons oder Bilder auf die andere Hälfte legen? Wenn es nicht möglich ist, werde ich einfach Bild als Hintergrund dieser Leinwand setzen, aber ich suche nach anderer Lösung.Fingerpainting auf einer Hälfte des Bildschirms

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

Ich weiß, es möglich ist, auf Imageview zu zeichnen, indem es als Bitmap-Einstellung so i Größe der Leinwand steuern kann, aber ich weiß nicht, wie ich es in Fingerabdruck Fall kann

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

Antwort

0

I weiß nichts über die Bibliothek, aber ich würde versuchen, ein XML-Layout etwas wie folgt zu erstellen:

<?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> 

Dann im 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

Ich habe versucht, etwas zu Ihrem Code ähnlich, aber es funktioniert nicht – AidanSalvatore

+0

Was meinst du mit "nicht funktioniert"? – nasch

+0

es ist nicht das Problem zu lösen, ist fingerpainting immer noch auf jedem Stück des Bildschirms verfügbar, auch wenn Sie die Größe des Containers ändern, ich denke, es hängt von Layout-Gewicht, aber es erfordert eine andere Lösung – AidanSalvatore

Verwandte Themen