
我正在使用这个问题的答案:Drawing on Canvas and save image,以便创建一个画布来绘制图像.
我正在打开一个名为DrawImage的FragmentActivity,当单击一个按钮时.在此活动中,我希望MyDrawVIEw与浮动 *** 作按钮一起显示,允许用户在单击时保存其绘图.
这就是我当前正在显示画布的方式,但是我不知道如何在它上面添加按钮.有任何想法吗?
的DrawImage
public class DrawImage extends FragmentActivity {@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); VIEw drawImageCanvas = new MyDrawVIEw(this.getApplicationContext()); setContentVIEw(drawImageCanvas); }}MyDrawVIEw(与链接相同)
public class MyDrawVIEw extends VIEw {private Bitmap mBitmap;private Canvas mCanvas;private Path mPath;private Paint mBitmapPaint;private Paint mPaint;public MyDrawVIEw(Context c) { super(c); mPath = new Path(); mBitmapPaint = new Paint(Paint.DITHER_FLAG); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setcolor(0xFF000000); mPaint.setStyle(Paint.Style.stroke); mPaint.setstrokeJoin(Paint.Join.ROUND); mPaint.setstrokeCap(Paint.Cap.ROUND); mPaint.setstrokeWIDth(3);}@OverrIDeprotected 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);}@OverrIDeprotected voID onDraw(Canvas canvas) { canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, mPaint);}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; }}private voID touch_up() { mPath.lineto(mX, mY); // commit the path to our offscreen mCanvas.drawPath(mPath, mPaint); // kill this so we don't double draw mPath.reset();}@OverrIDepublic 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;}public voID clear(){ mBitmap.erasecolor(color.transparent); invalIDate(); System.gc();}}解决方法:
您只将contentVIEw设置为MyDrawVIEw视图,因此布局中不再有任何视图(按钮).以这种方式添加按钮是不可能的.
解决方案是将MyDrawVIEw移动到xml文件(fragment_draw_image.xml)并设置内容v
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> <com.example.misah.test.MyDrawVIEw androID:ID="@+ID/myVIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"/> <button androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Save Drawing"/></relativeLayout>然后是setContentVIEw(R.layout.fragment_draw_image);在布局中,您可以在其上方绘制视图和按钮,以及您希望的任何其他内容.
编辑:
将此构造函数也添加到MyDrawVIEw中,您可以从xml中使用它:
public MyDrawVIEw(Context c) { super(c); init();}public MyDrawVIEw(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init();}public MyDrawVIEw(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init();}public MyDrawVIEw(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init();}并将构造函数中的所有doint添加到init方法(绘图等)
总结以上是内存溢出为你收集整理的android – 向图形画布添加按钮全部内容,希望文章能够帮你解决android – 向图形画布添加按钮所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)