将一个Activity分割成两部分,每个部分显示一个自定义View
来源:互联网 发布:pdf合并软件在线 编辑:程序博客网 时间:2024/06/04 19:39
最近刚开始学习Android开发,在练习写一个自定义View时就想能否把两个自定义View塞到一个Activity里。由于之前看的一直是SetContentView,也就没能实现,后来发现AddView可以实现,在这里记录一下,怕自己以后忘记了
布局文件:
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:id="@+id/zone1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"> </LinearLayout> <LinearLayout android:id="@+id/zone2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"> </LinearLayout> </LinearLayout>代码段:
package com.example.aaatest;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.FontMetrics;import android.graphics.Path;import android.graphics.RectF;import android.view.Display;import android.view.Menu;import android.view.View;import android.widget.LinearLayout;public class MainActivity extends Activity {LinearLayout zone1;LinearLayout zone2;public int mScreenWidth=0;public int mScreenHeight=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);zone1=(LinearLayout) findViewById(R.id.zone1);zone2=(LinearLayout) findViewById(R.id.zone2);Display display = getWindowManager().getDefaultDisplay(); mScreenWidth = display.getWidth(); mScreenHeight = display.getHeight(); FontView f=new FontView(this);//绘制String GeometryView g=new GeometryView(this); zone1.addView(f); zone2.addView(g);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}//绘制String class FontView extends View { public final static String STR_WIDTH = "获取字符串宽为:"; public final static String STR_HEIGHT = "获取字体高度为:"; Paint mPaint = null; public FontView(Context context) { super(context); mPaint = new Paint(); } @Override protected void onDraw(Canvas canvas) { //设置字符串颜色 mPaint.setColor(Color.WHITE); canvas.drawText("当前屏幕宽" + mScreenWidth, 0, 30, mPaint); canvas.drawText("当前屏幕高"+ mScreenHeight, 0, 60, mPaint); //设置字体大小 mPaint.setColor(Color.RED); mPaint.setTextSize(18); canvas.drawText("字体大小为18", 0, 90, mPaint); //消除字体锯齿 mPaint.setFlags(Paint.ANTI_ALIAS_FLAG); canvas.drawText("消除字体锯齿后", 0, 120, mPaint); //获取字符串宽度 canvas.drawText(STR_WIDTH + getStringWidth(STR_WIDTH), 0, 150, mPaint); //获取字体高度 canvas.drawText(STR_HEIGHT + getFontHeight(), 0, 180, mPaint); //从string.xml读取字符串绘制 mPaint.setColor(Color.YELLOW); canvas.drawText(getResources().getString(R.string.string_font), 0, 210, mPaint); super.onDraw(canvas); } /** * 获取字符串宽 * @param str * @return */ private int getStringWidth(String str) { return (int) mPaint.measureText(STR_WIDTH); } /* * 获取字体高度 */ private int getFontHeight() { FontMetrics fm = mPaint.getFontMetrics(); return (int)Math.ceil(fm.descent - fm.top) + 2; } } class GeometryView extends View { Paint mPaint = null; public GeometryView(Context context) { super(context); mPaint = new Paint(); mPaint.setFlags(Paint.ANTI_ALIAS_FLAG); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //设置画布颜色 也就是背景颜色 canvas.drawColor(Color.WHITE); mPaint.setColor(Color.BLACK); canvas.drawText("绘制无规则几何图形喔!!!", 150, 30, mPaint); //绘制一条线 mPaint.setColor(Color.BLACK); mPaint.setStrokeWidth(4); canvas.drawLine(0, 0, 100, 100, mPaint); //绘制一个矩形 mPaint.setColor(Color.YELLOW); canvas.drawRect(0, 120, 100, 200, mPaint); //绘制一个圆形 mPaint.setColor(Color.BLUE); canvas.drawCircle(80, 300, 50, mPaint); //绘制一个椭圆 mPaint.setColor(Color.CYAN); canvas.drawOval(new RectF(300,370,120,100), mPaint); //绘制多边形 mPaint.setColor(Color.BLACK); Path path = new Path(); path.moveTo(150+5 , 400 -50); path.lineTo(150+45, 400 - 50); path.lineTo(150+30, 460 - 50); path.lineTo(150+20, 460 - 50); path.close(); canvas.drawPath(path, mPaint); } }}
0 0
- 将一个Activity分割成两部分,每个部分显示一个自定义View
- 自定义BannerView,显示下个一个view部分界面
- 将单文档视图窗口分割成两部分
- hdu 3691最小割将一个图分成两部分
- iOS将一个图片平均分成两部分
- 提供将一个Activity转化为View显示出来
- 将一个字符串部分前置
- c# 如何用SplitContainer将From分割成上下两部分
- 把一个完全图分成两部分
- 自定义分割存储过程 SP_Split,将一个字符串分割成一个表
- 将一个浮点数的整数部分和小数部分分别输出显示,java显示(1H)
- 一个UILabel不同部分显示不同颜色
- Android自定义View基础部分
- 矩形将平面分割成了几个部分
- 页面显示部分文字,title再显示一个提示
- 【剑指offer】把一个数组分为两部分
- 将jsp中共同部分分出一个jsp
- 自动将HTML表格中的某列字符超宽的部分用一个层浮动显示
- usaco 4.2.1 Drainage Ditches
- free和malloc的用法
- 利用python调用外部的dll或者so文件,碉堡了
- 基于CIELab空间色彩K-means聚类彩色图像分割
- 使用安装向导安装 SQL Server 2014(安装程序)
- 将一个Activity分割成两部分,每个部分显示一个自定义View
- socket基础知识
- win7&Cocos2dx2.2&Android环境搭建中的问题汇总
- C语言函数指针基础
- Hat's words
- 【机器学习算法-python实现】svm支持向量机(3)—核函数
- C++ 对回调函数的理解与运用
- NUMA架构
- 《算法导论》笔记 第22章 22.5 强连通分支