我试图创建一个应用程序,在画布上画一些简单的线条。我想让画布占据屏幕的前50%,留下屏幕的后50%用于按钮之类的东西。我现在使用的是
setContentView(canvas);
,它可以使画布占到屏幕的100%。
安卓系统使帆布覆盖半屏幕
1
人关注
user6334610
发布于
2017-09-18
2
个回答
Thracian
发布于
2021-12-17
0
人赞同
你可以创建一个扩展视图的类,并在该视图的
onDraw()
方法中进行绘图。将该视图添加到你的布局中,并选择任何宽度或高度。
我如何将它添加到我的布局中,并选择宽度和高度?
Thracian
:
Let's say you created a class MyView extends View in com.example.views java folder.You add this to xml as adding another view(TextView, imageView etc) <com.example.views.MyView> or instantiating it in runtime. You can search adding custom view on runtime or xml, you will get lots of examples. Invoking myView.invalidate() invokes onDraw(Canvas canvas) of that view and you can draw anything you wish same way you draw to a canvas.
ggorlen
发布于
2021-12-17
0
人赞同
而不是
setContentView
,使用你的布局XML来创建一个视图来容纳画布,如图所示
在layout/main.xml中引用内部类View时出错
.
在这之后,就需要使用一个技术,在 android:layout_height 为屏幕尺寸的50%。 如:
<LinearLayout ...>
class="com.example.foo.FooActivity$Drawer"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
</LinearLayout>
你也可以使用,比如说,android:layout_weight="0.7"
和"0.3"
,将画布/按钮容器分别设置为屏幕的70%和30%。
这里有一个最小的、完整的例子。
Layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:keepScreenOn="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:background="#f00"
class="com.example.foo.FooActivity$Drawer"
android:background="#00f"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
<LinearLayout
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
<Button
android:id="@+id/start"
android:text="@string/start"
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="#f0f"
android:padding="10dp"
android:layout_margin="20dp"
<Button
android:id="@+id/stop"
android:text="@string/stop"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="#f0f"
android:padding="10dp"
android:layout_margin="20dp"
</LinearLayout>
</LinearLayout>
Activity:
package com.example.foo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
public class FooActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_foo);
public static class Drawer extends View {
private static Paint paint;
private static int viewWidth;
private static int viewHeight;
public Drawer(Context con, AttributeSet attr) {
super(con, attr);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.FILL);
// https://stackoverflow.com/a/9718512/6243352
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
super.onSizeChanged(xNew, yNew, xOld, yOld);
viewWidth = xNew;
viewHeight = yNew;
@Override
protected void onDraw(final Canvas c) {
super.onDraw(c);
paint.setARGB(255, 0, 0, 0);
int cx = viewWidth / 2;
int cy = viewHeight / 2;
c.drawCircle(cx, cy,viewWidth / 4, paint);