我已经删除了我的旧代码,因为它没有像我预期的那样工作。我试图在屏幕的某个部分使用onDraw画布功能,这样我的绘图周围仍然可以有按钮和其他文字。
的 的 *** 修改的 * **
我已经设法解决了这个问题。很多建议是有帮助的,但我无法让它与我想要的东西一起工作。这可能是我的错,而不是其他任何事情,所以感谢所有提供建议的人。以下是我解决问题的方法。
* 1。首先在布局文件中定义视图。
<view
class="com.project.MainActivity.Drawing"
android:id="@+id/drawing_area"
android:layout_width="700dp"
android:layout_height="900dp"
android:layout_centerInParent="true"/>
* 2。然后使用以下代码创建一个单独的java类文件:
public class Drawing extends View {
Paint paint = new Paint();
public Drawing(Context context) {
super(context);
}
public Drawing(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//Draw Image Here//
}
* 3。然后从主要活动中调用Drawing:
public class MainActivity extends Activity {
private Drawing mDrawingArea;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.percentage_count_layout);
mDrawingArea = (Drawing)findViewById(R.id.drawing_area);
}
答案 0 :(得分:2)
在View类中,您需要覆盖onMeasure()方法。这是您要求特定视图大小的地方。有一些关于这个主题的官方Android教程,一旦我在我的计算机上,我将编辑这篇文章。
编辑:
看看这个Android article about creating custom components.。具体来看看标题为“Extend onDraw()和onMeasure()”的部分。引用:
onMeasure()
更多参与其中。onMeasure()
是至关重要的 组件与其组件之间的渲染合同的一部分 容器。应该有效地覆盖onMeasure()
准确报告其所包含部件的测量结果。这是 由于限制的要求,使得稍微复杂一些 parent(传递给onMeasure()
方法)和 需要使用。调用setMeasuredDimension()
方法 计算出的宽度和高度。如果你失败了 从重写的onMeasure()
方法调用此方法, 结果将是测量时的例外。
在文章中进一步说明:
组件的
onMeasure()
方法应计算渲染组件所需的测量宽度和高度。它 应尽量保持在中传递的规范内,尽管如此 可以选择超过它们(在这种情况下,父母可以选择要做什么 做,包括剪辑,滚动,抛出异常或询问onMeasure()
再试一次,也许会有不同的衡量标准 规格)。
有一个CustomView示例可用作演示,但遗憾的是开发人员网站已经更改(更糟糕!),因此除了通过SDK Manager下载之外,它不可用。有关详细说明,请参阅页面here。
答案 1 :(得分:0)
您正在使用setContentView(),这本身就意味着整个视图都是全屏的。如果您希望图像只设置一定的大小,则需要以这种方式绘制。
onDraw(Canvas canvas)
{
super.onDraw(canvas)
//This code is for straight centering
//Also please do math outside of onDraw
//also below math is pseudocode not actual android code
canvas.drawBitmap(yourImageBitmap,
(screenSize.width / 2) - yourImageBitmap.width/2,
(screenSize.height / 2) - yourImageBitmap.height / 2),
yourPaintObject)
//The above code should draw your bitmap image in the center of the canvas
}
也喜欢我上面和下面的答案,如果你想改变画布大小,那么你需要使用onMeasure并正确设置它们。您最好的选择是查看ImageView类http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/ImageView.java的源代码 并看看他们是如何做到的
答案 2 :(得分:0)
这是一种方法,您可以在视图中覆盖以获取屏幕设备信息,每个设备运行一次
@Override
public void onSizeChanged (int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
screenW = w;
screenH = h;
scaledCardW = (int) (screenW/8); //or whatever scale you need for bitmaps
scaledCardH = (int) (scaledCardW*1.28);
bitmap = // load your bitmaps
}
答案 3 :(得分:0)
例如,200宽,150高。在视图中覆盖onMeasure方法。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(200, 150);
}