屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。
通过查看OPhone API文档可以发现,有个androidwidgetViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。该类有如下几个和动画相关的函数:
setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为androidviewanimationAnimation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。
java代码:
setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
showNext: 调用该函数来显示FrameLayout里面的下一个View。
showPrevious: 调用该函数来显示FrameLayout里面的上一个View。
复制代码
一般不直接使用ViewAnimator而是使用它的两个子类ViewFlipper和ViewSwitcher。ViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。该类额外提供了如下几个函数:
java代码:
isFlipping: 用来判断View切换是否正在进行
setFilpInterval:设置View之间切换的时间间隔
startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
stopFlipping: 停止View切换
复制代码
ViewSwitcher 顾名思义Switcher特指在两个View之间切换。可以通过该类指定一个ViewSwitcherViewFactory 工程类来创建这两个View。该类也具有两个子类ImageSwitcher、TextSwitcher分别用于和文本切换。
ViewFlipper示例
ViewFlipper是继承至FrameLayout的,所以它是一个Layout里面可以放置多个View。在示例中定义一个ViewFlipper,里面包含三个ViewGroup作为示例的三个屏幕,每个ViewGroup中包含一个按钮和一张,点击按钮则显示下一个屏幕。代码如下(res\layout\mainxml):
java代码:
<xml version="10" encoding="utf-8">
<LinearLayout
xmlns:android="http://schemasandroidcom/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ViewFlipper android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:persistentDrawingCache="animation"
android:flipInterval="1000"
android:inAnimation="@anim/push_left_in"
android:outAnimation="@anim/push_left_out"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:text="Next"
android:id="@+id/Button_next1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<ImageView
android:id="@+id/image1"
android:src="@drawable/dell1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</ImageView>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:text="Next"
android:id="@+id/Button_next2"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<ImageView
android:id="@+id/image2"
android:src="@drawable/lg"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</ImageView>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:text="Next"
android:id="@+id/Button_next3"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<ImageView
android:id="@+id/image3"
android:src="@drawable/lenovo"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</ImageView>
</LinearLayout>
</ViewFlipper>
</LinearLayout>
复制代码
系列之Android 切换多个layout界面(二) 的帖子链接http://wwweoeandroidcom/thread-90754-1-1html
系列之Android 切换多个layout界面(三) 的帖子链接http://wwweoeandroidcom/thread-90759-1-1html
获取内容面板,因为JFrame不能直接添加组件,需要用getContentPane()函数获取内容面板,再在内容面板上进行添加组件。
frameadd(child);子级将被添加到 contentPane。内容窗格始终是非null的。试图将其设置为 null 会导致JFrame抛出异常。默认的内容窗格上会设置有BorderLayout管理器。
扩展资料:
GraphicsEnvironment为Java应用程序提供了特定平台的 GraphicsDevice对象和 Font 对象集合。这些GraphicsDevice可以是各种本机和远端机器的资源,如屏幕、打印机或者是Image Buffer,甚至是Graphics2D绘图方法的目标对象。
而GraphicsDevice就是指特定的图形环境了,如屏幕和打印设备等。这样,我们就可以用GraphicsDevice来 *** 纵屏幕了。GraphicsDevice提供的setFullScreenWindow()方法就是设置全屏幕用的。
-Swing
VStack 会一次性渲染所有视图,无论它们是在屏幕上还是屏幕外。 当您有少量子视图或不希望“懒加载”延迟渲染时,请使用常规 VStack。
alignment:对接方式,左/中/右
spacing:间距
HStack 会一次性渲染所有视图,无论它们是在屏幕上还是屏幕外。 当您有少量子视图或不希望“懒加载”延迟渲染时,请使用常规 HStack。
ZStack 为每个连续的子视图分配比前一个更高的 z 轴值,这意味着后面的子视图出现在前面的子视图的“顶部”。
下面的示例创建一个 100 x 100 点的 ZStack 矩形视图,填充六种颜色之一,将每个连续的子视图偏移 10 点,使它们不会完全重叠:
zIndex:层叠优先级,从大到小1-0
一个灵活的填充空间布局,垂直/水平填充,默认填充满剩余所有空间,也可以指定填充的宽度或高度
minLength:设置填充最小宽度/高度
滚动视图在可滚动内容区域内显示其内容。 当用户执行适合平台的滚动手势时,滚动视图会调整底层内容的可见部分。 ScrollView 可以水平、垂直或同时滚动,但不提供缩放功能。(一般配合HStack、VStack等布局使用)
在以下示例中,ScrollView 允许用户滚动包含 100 个文本视图的 VStack。 列表后的图像显示了右侧滚动视图的临时可见滚动条; 您可以使用 ScrollView 初始值设定项的 showsIndicators 参数禁用它。
Axisset: 设置滚动方向/水平/垂直
showsIndicators:是否显示滚动指示器
一个容器视图,将其内容定义为它自己的大小和坐标空间的函数。可以获取到视图的大小和坐标
通常使用 ViewBuilder 作为子视图生成闭包参数的参数属性,允许这些闭包提供多个子视图。 例如,以下CustomView接受一个通过视图构建器生成一个或多个视图的闭包。(通常用来自定义View、dialog、toast等)
控件显示到屏幕里才会加载(性能会有提升)
控件显示到屏幕里才会加载
//注意,没有考虑/和+-的优先级。
import javaxswing;
import javaawt;
import javaawtevent;
public class Calculator3 extends JFrame implements ActionListener {
private boolean dotExist, operated, equaled; // 帮助运算的布尔变量
private double storedNumber; // 目前的结果
private char lastOperator; // 表示上一运算符
private JTextField operation; // 结果栏
private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符
private JButton[] numbers; // 数字
// 构造者
public Calculator3() {
setTitle("Calculator");
// 初始化变量
dotExist = false; // 表示当前的数是否有小数点
operated = false; // 表示任意运算符是否被按下
equaled = false; // 表示等号是否被按下
storedNumber = 0;
lastOperator = '';
// 初始化窗口变量
operation = new JTextField("0");
operationsetEditable(false);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
dot = new JButton("");
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("");
div = new JButton("/");
sqrt = new JButton("√");
equal = new JButton("=");
changePN = new JButton("±");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane()setLayout(layout);
addComponent(layout, operation, 0, 0, 4, 1);
addComponent(layout, numbers[1], 1, 0, 1, 1);
addComponent(layout, numbers[2], 1, 1, 1, 1);
addComponent(layout, numbers[3], 1, 2, 1, 1);
addComponent(layout, numbers[4], 2, 0, 1, 1);
addComponent(layout, numbers[5], 2, 1, 1, 1);
addComponent(layout, numbers[6], 2, 2, 1, 1);
addComponent(layout, numbers[7], 3, 0, 1, 1);
addComponent(layout, numbers[8], 3, 1, 1, 1);
addComponent(layout, numbers[9], 3, 2, 1, 1);
addComponent(layout, dot, 4, 0, 1, 1);
addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1);
addComponent(layout, plus, 1, 3, 1, 1);
addComponent(layout, minus, 2, 3, 1, 1);
addComponent(layout, multi, 3, 3, 1, 1);
addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, equal, 5, 0, 2, 1);
addComponent(layout, changePN, 5, 2, 1, 1);
addComponent(layout, clear, 5, 3, 1, 1);
}
// 对按钮进行反应的方法
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) egetSource();
if (btn == clear) {
operationsetText("0");
dotExist = false;
storedNumber = 0;
lastOperator = '';
} else if (btn == equal) {
operate('=');
equaled = true;
} else if (btn == plus) {
operate('+');
equaled = false;
} else if (btn == minus) {
operate('-');
equaled = false;
} else if (btn == multi) {
operate('');
equaled = false;
} else if (btn == div) {
operate('/');
equaled = false;
} else if (btn == changePN) {
operate('p');
operate('=');
equaled = true;
} else if (btn == sqrt) {
operate('s');
operate('=');
equaled = true;
} else {
if (equaled)
storedNumber = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i]) {
if (operationgetText()equals("0"))
operationsetText("" + i);
else if (!operated)
operationsetText(operationgetText() + i);
else {
operationsetText("" + i);
operated = false;
}
}
if (btn == dot && !dotExist) {
operationsetText(operationgetText() + "");
dotExist = true;
}
}
}
// 进行运算的方法
private void operate(char operator) {
double currentNumber = DoublevalueOf(operationgetText())
doubleValue();
if (lastOperator == '')
storedNumber = currentNumber;
else if (lastOperator == '+')
storedNumber += currentNumber;
else if (lastOperator == '-')
storedNumber -= currentNumber;
else if (lastOperator == '')
storedNumber = currentNumber;
else if (lastOperator == '/')
storedNumber /= currentNumber;
else if (lastOperator == 'p')
storedNumber = -1;
else if (lastOperator == 's')
storedNumber = Mathsqrt(currentNumber);
else if (lastOperator == '=' && equaled)
storedNumber = currentNumber;
operationsetText("" + storedNumber);
operated = true;
lastOperator = operator;
}
// 快捷使用GridBagLayout的方法
private void addComponent(GridBagLayout layout, Component component,
int row, int col, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints();
constraintsfill = GridBagConstraintsBOTH;
constraintsinsets = new Insets(10, 2, 10, 2);
constraintsweightx = 100;
constraintsweighty = 100;
constraintsgridx = col;
constraintsgridy = row;
constraintsgridwidth = width;
constraintsgridheight = height;
layoutsetConstraints(component, constraints);
if (component instanceof JButton)
((JButton) component)addActionListener(this);
getContentPane()add(component);
}
// 主方法初始化并显示窗口
public static void main(String[] args) {
Calculator3 calc = new Calculator3();
calcsetSize(290, 400);
calcsetVisible(true);
}
}
1)QLayout::seetDefaultConstraint 0:主窗口最小值被设置为minimumSize(),即layout管理所需的最小空间尺寸,除非空间widget已经有最小的minimumSize尺寸。
2)QLayout::SetFixedSize 3,主窗口的大小被设定为sizeHint()刚好适配好的大小,并不能再被重新设定大小。
3)QLayout::SetMinimumSize 2,设定主窗口minimumSize为minimumSize()定义的,其不能再小
4)QLayout::SetMaxmumSize 4,设定主窗口的最大尺寸maxmumSize到maxmumSize()函数确定的尺寸,其不能大于这个尺寸。
5)QLayout::SetMinAndMaxSize 5,设定主窗口的大小尺寸分别为minimumSize和maxmunSize
6)QLayout::setNoConstraint 1,主窗口不设定尺寸策略,保持用户设定的已有属性
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)