【发布时间】:2017-06-29 11:28:07
【问题描述】:
我正在尝试在 ImageView 上绘图(就像一个简单的油漆,但只是在图像上)。我创建了一个自定义 MyImageView 类,它扩展了我覆盖 onDraw 的 ImageView。我希望 ImageView 位于屏幕的中心。
当我使用一种布局时,图像出现在左上角,我可以毫无问题地在其上绘制。
当我使用不同的布局时,图像出现在屏幕的中心但是画布仍然是左上角的这个小矩形。因此,当我尝试在图像上绘制时,我只能在左上角进行绘制,并且更改出现在图像的中心。
在我的 MainActivity 我设置:
myImageView = (MyImageView) findViewById(R.id.pdfView);
// I also extract the bitmap myBitmap from the pdf ...
// and pass it to the ImageView
myImageView.setImageBitmap(myBitmap);
// and I set the Canvas too:
Canvas myCanvas = new Canvas(myBitmap);
myImageView.setMyCanvas(myCanvas);
那么这里是 MyImageView 的关键部分:
public class MyImageView extends
android.support.v7.widget.AppCompatImageView {
// variables...
public MyImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setupDrawing();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(drawPath, drawPaint);
}
private void setupDrawing() { //...usual stuff here }
@Override
public boolean onTouchEvent(MotionEvent event) { //...usual stuff here }
public void setMyCanvas(Canvas canvas) { this.myCanvas = canvas; }
我是否必须在 MyImageView 或 MainActivity 中添加/更改某些内容,以便画布仅位于 ImageView 顶部或至少延伸到整个屏幕?
【问题讨论】:
-
你能在这里添加你的 onDraw() 方法的代码吗?你有硬编码值吗?此外,第二种情况看起来您已将图像视图的宽度和高度设置为 match_parent,这就是您将完整区域作为画布的原因。
-
我认为将 android:gravity="center" 添加到您的线性布局应该可以使其按需要工作。
标签: android canvas imageview ondraw