2017-08-15 37 views
0

我正在测试sdk示例的Fingerpaint演示。当然,它的工作原理非常完美,但我猜测,有没有办法让它只能在屏幕的一半上工作,所以我可以把按钮或图像放在另一半上?如果这是不可能的,我会把图像作为背景,但我正在寻找其他解决方案。指纹在屏幕的一半

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

我知道这是可能通过将其设定为位图上的ImageView得出这样我就可以控制画布的大小,但我不知道我怎样才能在指纹的情况下

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

回答

0

我用它不知道库什么,但我会尝试创建一个XML布局是这样的:

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

然后在你的代码:

@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

我试图做出类似于您的代码的东西,但它不起作用 – AidanSalvatore

+0

“不工作”是什么意思? – nasch

+0

它不解决问题,即使您更改容器的大小,指纹仍然可用在每个屏幕上,我认为这取决于版面权重,但它需要另一个解决方案 – AidanSalvatore

相关问题