Android 使画布覆盖半屏
Posted
技术标签:
【中文标题】Android 使画布覆盖半屏【英文标题】:Android make canvas cover half screen 【发布时间】:2017-09-18 13:06:56 【问题描述】:我正在尝试创建一个用于在画布中绘制一些简单线条的应用程序。我希望画布占据屏幕的顶部 50%,将屏幕底部的 50% 用于按钮等等。我目前正在使用setContentView(canvas);
,这使得画布占据了 100% 的屏幕。
【问题讨论】:
【参考方案1】:您可以创建一个扩展 View 的类,并在该视图的 onDraw()
方法上在该视图内进行绘图。使用您选择的任何宽度或高度将该视图添加到您的布局中。
【讨论】:
如何将其添加到我选择的宽度和高度的布局中? 假设您在 com.example.views java 文件夹中创建了一个类 MyView extends View。您将其添加到 xml 作为添加另一个视图(TextView、imageView 等)代替setContentView
,使用您的布局XML创建一个视图来保存画布,如Error referencing an inner class View in layout/main.xml所示。
之后,就是在android:layout_height 50% of the screen size中使用一种技术比如:
<LinearLayout ...>
<view
class="com.example.foo.FooActivity$Drawer"
android:layout_
android:layout_
android:layout_weight="1"
/>
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="horizontal"
>
</LinearLayout>
您还可以使用 android:layout_weight="0.7"
和 "0.3"
来分别将画布/按钮容器设置为屏幕的 70% 和 30%。
这是一个最小的完整示例:
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:keepScreenOn="true"
android:layout_
android:layout_
android:gravity="center"
android:orientation="vertical"
android:background="#f00"
>
<view
class="com.example.foo.FooActivity$Drawer"
android:background="#00f"
android:layout_
android:layout_
android:layout_weight="1"
/>
<LinearLayout
android:gravity="center"
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="horizontal"
>
<Button
android:id="@+id/start"
android:text="@string/start"
android:textSize="20sp"
android:layout_
android:layout_
android:backgroundTint="#f0f"
android:padding="10dp"
android:layout_margin="20dp"
/>
<Button
android:id="@+id/stop"
android:text="@string/stop"
android:textSize="20sp"
android:layout_
android:layout_
android:backgroundTint="#f0f"
android:padding="10dp"
android:layout_margin="20dp"
/>
</LinearLayout>
</LinearLayout>
活动:
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://***.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);
结果:
【讨论】:
以上是关于Android 使画布覆盖半屏的主要内容,如果未能解决你的问题,请参考以下文章
使画布视图无效时单击按钮后应用程序崩溃(Android Studio,Java)
xml [使布局覆盖任务栏]在折叠工具栏布局中,必须添加所有元素:android:fitsSystemWindows =“t