Java编程经典小游戏设计-打砖块小游戏源码

[程序中使用的数据结构和符号说明]

HitBrick类

GreenBallThread控制小球路线

xUp,yUp,bouncing定义变量存储16位数值形式

x,y小球坐标

xDx,yDy坐标增量

MAX_X,MAX_Y坐标最大值

renew初始化

label标签

Rx,Ry横板坐标

Brick[]砖块

ball小球

HitBrick()定义小球横板及砖块位置坐标

keyPressd(keyEent)定义小球启动键(按空格键启动)

keyReleased(keyEvent)接收键盘事件侦听器接口)

keyTyped(keyEvent)键入空格键时调用keyEvent

paint(Graphics)对砖块填充颜色

move定义小球的运动轨迹和砖块的消失

main主函数

BallThread类

通过继承Thread类使Ball类线程化,并把小球的弹跳动作放进Run()中执行

Brick类

定义砖块坐标位置和砖块按钮

Ball类

定义小球坐标位置

[程序设计流程]

程序中使用的部分方法解释

开始命令:空格键

privateJLabellabel;定义一个标签,label=newJLabel("按空格键开始");内容为空格键开始,addKeyListener(this);定义一个键盘监听器,

if (e.getKeyCode() ==e.VK_SPACE) {
   if(renew){
    greenBallThread=new BallThread(this);
    bouncing = true;
    greenBallThread.start();
    label.setVisible(false);
   }
   renew=false;
  }

重置并开始游戏

移动命令:方向键左键和右键

if(e.getKeyCode()==e.VK_LEFT){
   Rx=Rx-20;
   if(bouncing){
    if(Rx<0){
     Rx=0;
    }
   }
   else{
    if(Rx<0){
     Rx=0;
    }
    else{
     x=x-20;
     ball.ball_x=x;
    }
   }
   repaint();
  }

同开始命令原理,如果键入左键,横版向左移动20个单位(Rx为横板坐标),如果小球还在运动,当横板移到最左侧(Rx=0),不能再向左移动,则横板靠在最左侧(Rx=0),

if(e.getKeyCode()==e.VK_RIGHT){
   Rx=Rx+20;
   if(bouncing){
    if(Rx+80>300){
     Rx=220;
    }
   }
   else{
    if(Rx+80>300){
     Rx=220;
    }
    else{
     x=x+20;
     ball.ball_x=x;
    }
   }
   repaint();
  }
 }

向右移动同向左移动原理,因为定义界面横坐标最大值为300,横板长度80,故Rx=220时碰最右侧

砖块设定:

brick[0]=new Brick(0,60,50,20);
  brick[1]=new Brick(50,60,50,20);
  brick[2]=new Brick(100,60,50,20);
……
brick[16]=new Brick(200,160,50,20);
  brick[17]=new Brick(250,160,50,20);
  ball=new Ball(150,450,10,10);
public void paint(Graphics g){
  super.paint(g);
  ball.rect.setLocation(x,y);
  if(bouncing){
   for(int i=0;i<=17;i++){
    if(brick[i].visible==true){
     switch(i){
      case 0 :g.setColor(Color.blue);
          break;
      case 1 :g.setColor(Color.cyan);
          break;
      case 2 :g.setColor(Color.gray);
          break;
       ……
case 17 :g.setColor(Color.yellow);
          break;
      }
    g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);
    }
   }
   g.setColor(Color.red);
   g.fillOval(x, y, 10, 10);
   g.setColor(Color.blue);
   g.fillRect(Rx,Ry,80,20);

brick[0]=newBrick(0,60,50,20);设置砖块坐标,ball=newBall(150,450,10,10);和小球的坐标

if(brick[i].visible==true)判断砖块存在,用switch语句,逐个对砖块填充颜色,最后四行代码是分别对小球和横板颜色坐标的定义

小球的移动:

try{
    Thread.currentThread().sleep(25);
   }
   catch(InterruptedException exception){
    System.err.println(exception.toString());
   }

定义小球的速度,若发生错误,则执行catch语句,打印错误

for(int i=0;i<=17;i++){
    if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){
     brick[i].visible=false;
     yUp=!yUp;/
    }
   }

当小球接触到砖块时,砖块不可见(消失)

if(x+5>Rx&&x+5<Rx+80&&y+10>=Ry){
    yUp=false;
    xDx=(int)(Math.random()*5+2);
    yDy=(int)(Math.random()*5+2);
   }

判断小球坐标和横板坐标,当小球落在横板坐标之内,小球反弹,小球横坐标和纵坐标都以一个随机值改变后运动

if(xUp==true){
    x+=xDx;
   }
   else{
    x-=xDx;
   }
   if(yUp==true){
    y+=yDy;
   }
   else{
    y-=yDy;
   }

判断小球横坐标如果在增加,小球横坐标=小球原横坐标+小球横坐标增量,否则小球横坐标=小球原横坐标-小球横坐标增量;纵坐标同理

if(y<=0){
    y=0;
    ball.ball_y=y;
    yUp=true;
    xDx=(int)(Math.random()*5+2);
    yDy=(int)(Math.random()*5+2);
   }
   else if(y>=MAX_Y-15){
    yDy=(int)(Math.random()*5+2);
    //yUp=false;
    break;
   }

判断小球到画面顶部(定义顶部的纵坐标为0),小球向下反弹,原理同小球和横板接触的反弹规则,否则,判断小球纵坐标是否大于MAX_Y-15(纵坐标最大值-15),反弹规则改变为横坐标不变,纵坐标随机改变

if(x<=0){
    x=0;
    ball.ball_x=x;
    xUp=true;
    xDx=(int)(Math.random()*5+2);
    yDy=(int)(Math.random()*5+2);
   }
   else if(x>=MAX_X-10){
    x=MAX_X-10;
    ball.ball_x=x;
    xDx=(int)(Math.random()*5+2);
    yDy=(int)(Math.random()*5+2);
    xUp=false;
   }

判断小球到画面最左侧(定义最左侧横坐标为0),向右侧反弹,反弹规则同小球和横板接触的反弹规则,或者小球到画面最右侧,向左反弹,反弹规则同上,(if(x>=MAX_X-10)判断小球是否到右边侧,小球的直径为10)

int i;
   for(i=0;i<=17&&brick[i].visible==false;i++){
   }
   if(i==18){
    break;
   }  

如果所有砖块都不可见,则重新玩

renew=true;     //初始化
  bouncing=false;
  for(int i=0;i<=17;i++){
   brick[i].visible=true;
  }
  xUp=true;
  yUp=false;
  xDx=1;
  yDy=1;
  x=150;
  y=450;
  Rx=120;
  Ry=460;       //

重新开始,初始化,小球静止,所有砖块可见,小球在横坐标方向,可随横板移动而移动,纵坐标在未开时游戏前不能改变,定义小球横坐标和纵坐标增量都为1,小球初始位置坐标(150,450)横板初始位置坐标(120,460)

[源程序]

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class HitBrick extends JFrame implements KeyListener{
	private BallThread greenBallThread;
	//控制小球的线程
	private Boolean xUp,yUp,bouncing;
	private int x,y,xDx,yDy;
	//小球坐标,增量
	private final int MAX_X=300,MAX_Y=500;
	private Boolean renew;
	private JLabel label;
	private int Rx,Ry;
	//横板坐标
	private Brick brick[]=new Brick[18];
	//砖块
	private Ball ball;
	//小球
	public HitBrick(){
		super("打砖块");
		Container pane=getContentPane();
		//设置空白面板容器
		label=new JLabel("按空格键开始");
		//标签
		label.setHorizontalAlignment(JLabel.CENTER);
		//水平
		label.setVerticalAlignment(JLabel.BOTTOM);
		//垂直
		pane.add(label);
		//向面板里添加标签
		xUp=true;
		//横坐标可以移动
		yUp=false;
		//纵坐标不可以移动
		xDx=1;
		yDy=1;
		x=150;
		//小球坐标
		y=450;
		Rx=120;
		//横板坐标
		Ry=460;
		renew=true;
		bouncing=false;
		addKeyListener(this);
		//键盘监听器
		brick[0]=new Brick(0,60,50,20);
		//砖块坐标
		brick[1]=new Brick(50,60,50,20);
		brick[2]=new Brick(100,60,50,20);
		brick[3]=new Brick(150,60,50,20);
		brick[4]=new Brick(200,60,50,20);
		brick[5]=new Brick(250,60,50,20);
		brick[6]=new Brick(0,90,50,20);
		brick[7]=new Brick(50,110,50,20);
		brick[8]=new Brick(100,130,50,20);
		brick[9]=new Brick(150,130,50,20);
		brick[10]=new Brick(200,110,50,20);
		brick[11]=new Brick(250,90,50,20);
		brick[12]=new Brick(0,160,50,20);
		brick[13]=new Brick(50,160,50,20);
		brick[14]=new Brick(100,160,50,20);
		brick[15]=new Brick(150,160,50,20);
		brick[16]=new Brick(200,160,50,20);
		brick[17]=new Brick(250,160,50,20);
		ball=new Ball(150,450,10,10);
		//球的坐标
		setSize(MAX_X,MAX_Y);
		//窗口大小
		setResizable(false);
		setVisible( true );
		//可视化
	}
	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode() ==e.VK_SPACE) {
			if(renew){
				greenBallThread=new BallThread(this);
				bouncing = true;
				greenBallThread.start();
				label.setVisible(false);
			}
			renew=false;
		}
		if(e.getKeyCode()==e.VK_LEFT){
			Rx=Rx-20;
			if(bouncing){
				if(Rx<0){
					Rx=0;
				}
			} else{
				if(Rx<0){
					Rx=0;
				} else{
					x=x-20;
					ball.ball_x=x;
				}
			}
			repaint();
		}
		if(e.getKeyCode()==e.VK_RIGHT){
			Rx=Rx+20;
			if(bouncing){
				if(Rx+80>300){
					Rx=220;
				}
			} else{
				if(Rx+80>300){
					Rx=220;
				} else{
					x=x+20;
					ball.ball_x=x;
				}
			}
			repaint();
		}
	}
	public void keyReleased (KeyEvent e) {
	}
	public void keyTyped (KeyEvent e){
	}
	public void paint(Graphics g){
		super.paint(g);
		ball.rect.setLocation(x,y);
		if(bouncing){
			for (int i=0;i<=17;i++){
				if(brick[i].visible==true){
					switch(i){
						case 0 :g.setColor(Color.blue);
						break;
						case 1 :g.setColor(Color.cyan);
						break;
						case 2 :g.setColor(Color.gray);
						break;
						case 3 :g.setColor(Color.green);
						break;
						case 4 :g.setColor(Color.magenta);
						break;
						case 5 :g.setColor(Color.yellow);
						break;
						case 6 :g.setColor(Color.white);
						break;
						case 7 :g.setColor(Color.black);
						break;
						case 8 :g.setColor(Color.orange);
						break;
						case 9 :g.setColor(Color.pink);
						break;
						case 10 :g.setColor(Color.darkGray);
						break;
						case 11 :g.setColor(Color.red);
						break;
						case 12 :g.setColor(Color.blue);
						break;
						case 13 :g.setColor(Color.cyan);
						break;
						case 14 :g.setColor(Color.gray);
						break;
						case 15 :g.setColor(Color.green);
						break;
						case 16 :g.setColor(Color.magenta);
						break;
						case 17 :g.setColor(Color.yellow);
						break;
					}
					g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);
				}
			}
			g.setColor(Color.red);
			g.fillOval(x, y, 10, 10);
			g.setColor(Color.blue);
			g.fillRect(Rx,Ry,80,20);
		} else{
			for (int i=0;i<=17;i++){
				switch(i){
					case 0 :g.setColor(Color.blue);
					break;
					case 1 :g.setColor(Color.cyan);
					break;
					case 2 :g.setColor(Color.gray);
					break;
					case 3 :g.setColor(Color.green);
					break;
					case 4 :g.setColor(Color.magenta);
					break;
					case 5 :g.setColor(Color.yellow);
					break;
					case 6 :g.setColor(Color.white);
					break;
					case 7 :g.setColor(Color.black);
					break;
					case 8 :g.setColor(Color.orange);
					break;
					case 9 :g.setColor(Color.pink);
					break;
					case 10 :g.setColor(Color.darkGray);
					break;
					case 11 :g.setColor(Color.red);
					break;
					case 12 :g.setColor(Color.blue);
					break;
					case 13 :g.setColor(Color.cyan);
					break;
					case 14 :g.setColor(Color.gray);
					break;
					case 15 :g.setColor(Color.green);
					break;
					case 16 :g.setColor(Color.magenta);
					break;
					case 17 :g.setColor(Color.yellow);
					break;
				}
				g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);
			}
			g.setColor(Color.red);
			g.fillOval(x, y, 10, 10);
			g.setColor(Color.blue);
			g.fillRect(Rx, Ry, 80, 20);
		}
	}
	public void move(){
		while(true){
			try{
				Thread.currentThread().sleep(25);
			}
			catch(InterruptedException exception){
				System.err.println(exception.toString());
			}
			for (int i=0;i<=17;i++){
				if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){
					brick[i].visible=false;
					yUp=!yUp;
					//打到球不可见
				}
			}
			if(x+5>Rx&&x+5<Rx+80&&y+10>=Ry){
				yUp=false;
				xDx=(int)(Math.random()*5+2);
				//小球坐标增量
				yDy=(int)(Math.random()*5+2);
			}
			if(xUp==true){
				x+=xDx;
				//小球左右移动坐标改变
			} else{
				x-=xDx;
			}
			if(yUp==true){
				y+=yDy;
			} else{
				y-=yDy;
			}
			if(y<=0){
				y=0;
				ball.ball_y=y;
				yUp=true;
				xDx=(int)(Math.random()*5+2);
				yDy=(int)(Math.random()*5+2);
			} else if(y>=MAX_Y-15){
				yDy=(int)(Math.random()*5+2);
				//yUp=false;
				break;
			}
			if(x<=0){
				x=0;
				ball.ball_x=x;
				xUp=true;
				xDx=(int)(Math.random()*5+2);
				yDy=(int)(Math.random()*5+2);
			} else if(x>=MAX_X-10){
				x=MAX_X-10;
				ball.ball_x=x;
				xDx=(int)(Math.random()*5+2);
				yDy=(int)(Math.random()*5+2);
				xUp=false;
			}
			ball.rect.setLocation(ball.ball_x,ball.ball_y);
			repaint();
			int i;
			//如果所有砖块都不可见
			for (i=0;i<=17&&brick[i].visible==false;i++){
				//则重新玩
			}
			if(i==18){
				break;
			}
			//
		}
		renew=true;
		//初始化
		bouncing=false;
		for (int i=0;i<=17;i++){
			brick[i].visible=true;
		}
		xUp=true;
		yUp=false;
		xDx=1;
		yDy=1;
		x=150;
		y=450;
		Rx=120;
		Ry=460;
		//
		repaint();
		repaint();
		label.setVisible(true);
	}
	public static void main(String[] args) {
		HitBrick mar=new HitBrick();
	}
}
class BallThread extends Thread{
	private HitBrick m;
	BallThread(HitBrick a){
		//super();
		m=a;
	}
	public void run(){
		m.move();
		m.repaint();
	}
}
class Brick{
	Rectangle rect=null;
	//长方形对象,砖块按钮的位置和宽高
	int brick_x,brick_y;
	//按扭的左上角坐标
	int brick_width,brick_height;
	//按扭的宽和高
	Boolean visible;
	public Brick(int x,int y,int w,int h)
	   {
		brick_x=x;
		brick_y=y;
		brick_width=w;
		brick_height=h;
		visible=true;
		rect=new Rectangle(x,y,w,h);
		//创建长方形对象---砖块按钮的位置和宽高。
	}
}
class Ball{
	Rectangle rect=null;
	int ball_x,ball_y;
	int ball_width,ball_height;
	public Ball(int x,int y,int w,int h){
		ball_x=x;
		ball_y=y;
		ball_width=w;
		ball_height=h;
		rect=new Rectangle(x,y,w,h);
	}
}

运行结果:

空格键开始,方向键控制左右,死亡重新开始。

虽然系统的基本功能都已实现,但还是存在系统不稳定等多个bug尚待解决。在做系统的过程中遇到了很多问题,有的是知识存储不足,有的是考虑不够周全,所以学习之路永无止境。作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。

总结

以上就是本文关于Java编程经典小游戏设计-打砖块小游戏源码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:JavaWeb项目中dll文件动态加载方法解析(详细步骤)、python基础练习之几个简单的游戏等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

(0)

相关推荐

  • Java编写迷宫小游戏

    缘起: 去年(大三上学期)比较喜欢写小游戏,于是想试着写个迷宫试一下. 程序效果: 按下空格显示路径: 思考过程: 迷宫由一个一个格子组成,要求从入口到出口只有一条路径. 想了一下各种数据结构,似乎树是比较合适的,从根节点到每一个子节点都只有一条路径.假设入口是根节点,出口是树中某个子节点,那么,从根节点到该子节点的路径肯定是唯一的. 所以如果能构造一棵树把所有的格子都覆盖到,也就能够做出一个迷宫了. 另外还要求树的父节点和子节点必须是界面上相邻的格子. 在界面显示时,父节点和子节点之间共用的边

  • java编写贪吃蛇小游戏

    废话不多说,直接奉上代码: Frame.java package snake; import java.awt.Graphics; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import

  • Java太阳系小游戏分析和源码详解

    最近看了面向对象的一些知识,然后跟着老师的讲解做了一个太阳系各行星绕太阳转的小游戏,来练习巩固一下最近学的知识: 用到知识点:类的继承.方法的重载与重写.多态.封装等 分析: 1.需要加载图片.画图 2.建一个面板,主页面 3.行星类 效果图: 先看一下源码结构图: 现在逐步分析各个类的功能: 1)工具类-----util包中 --Constant类   封装了游戏中用到的常量 --GameUtil类  封装了游戏的图片加载功能 --MyFrame类  封装了游戏面板的构造,用于各面板的父类 -

  • java编写的简单移动方块小游戏代码

    本文实例讲述了java编写的简单移动方块小游戏代码.分享给大家供大家参考,具体如下: 运行效果截图如下: 第一次用java编写图形化的界面,还是有些青涩..以后继续努力!!具体代码如下: //Little Box Game by AlexYui //Game.java By 1093710210@ HIT import javax.swing.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.*; import

  • Java编写猜数字小游戏

    本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是Java语言写的一个猜数字小游戏引用片段: import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; //主函数 public class calssOne { public static void main(String[] args) { //shit+Ctrl+o int result; //随机产生一个

  • Java完美实现2048小游戏

    完美地模仿了2048游戏,是根据网友的一个2048改的. Block.java import javax.swing.*; import java.awt.*; public class Block extends JLabel { private int value; public Block() { value = 0;//初始化值为0 setFont(new Font("font", Font.PLAIN, 40));//设定字体 setBackground(Color.gray

  • java实现五子棋小游戏

    java实现五子棋小游戏 package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //定义一个操作面板 OperatorPane op=null; public GomokuFrame() { //设置名称 this.setTitle("五子棋"); //设置窗口大小 this.setSize(510,510); //设置窗

  • Java俄罗斯方块小游戏

    去年就已经学了这个技术了,一直没去写,现在抽个时间写了个俄罗斯方块游戏. 只有简单的新游戏,暂停,继续,积分功能.简单的实现了俄罗斯的经典功能. 不介绍了,有兴趣的自己运行一下,后面贴出了图片. 代码: package cn.hncu; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.Act

  • Java编程经典小游戏设计-打砖块小游戏源码

    [程序中使用的数据结构和符号说明] HitBrick类 GreenBallThread控制小球路线 xUp,yUp,bouncing定义变量存储16位数值形式 x,y小球坐标 xDx,yDy坐标增量 MAX_X,MAX_Y坐标最大值 renew初始化 label标签 Rx,Ry横板坐标 Brick[]砖块 ball小球 HitBrick()定义小球横板及砖块位置坐标 keyPressd(keyEent)定义小球启动键(按空格键启动) keyReleased(keyEvent)接收键盘事件侦听器接

  • 利用原生js实现html5小游戏之打砖块(附源码)

    前言 PS:本次项目中使用了大量 es6 语法,故对于 es6 语法不太熟悉的小伙伴最好能先了解一些基本的原理再继续阅读. 首先,先说明一下做这个系列的目的:其实主要源于博主希望熟练使用 canvas 的相关 api ,同时对小游戏的实现逻辑比较感兴趣,所以希望通过这一系列的小游戏来提升自身编程能力:关于 es6 语法,个人认为以后 es6 语法会越来越普及,所以算是提前熟悉语法使用技巧.小游戏的实现逻辑上可能并不完善,也许会有一些 bug ,但是毕竟只是为了提升编程能力与技巧,希望大家不要太较

  • java向文件中追加内容与读写文件内容源码实例代码

    java向文件中追加内容与读写文件内容源码实例代码 向文件尾加入内容有多种方法,常见的方法有两种: RandomAccessFile类可以实现随机访问文件的功能,可以以读写方式打开文件夹的输出流 public void seek(long pos)可以将读写指针移到文件尾,参数Pos表示从文件开头以字节为单位测量的偏移位置,在该位置文件指针. public void write(int pos)将数据写到读写指针后面,完成文件的追加.参数pos表示要写入的Byte 通过FileWrite打开文件

  • 微信小程序select下拉框实现源码

    这篇文章主要介绍了微信小程序select下拉框实现源码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 小程序中是没有h5中的下拉 标签的 所以要实现下拉功能就必须自己动手写拉,这里为了更清楚的显示小程序层级 就把源码直接复制过来了 <view class='list-msg'> <view class='list-msg1'> <text>商品金额</text> <text>¥99.00<

  • jsf实现微信小程序简洁登录页面(附源码)

    上图: 用户不存在:  代码: login.wxml <view class="v1" style="height:{{clientHeight?clientHeight+'px':'auto'}}">    <!-- v2父容器  子view使用绝对布局 -->    <view class="v2">      <view class="dltext" style="wi

  • java底层AQS实现类kReentrantLock锁的构成及源码解析

    目录 引导语 1.类注释 2.类结构 3.构造器 4.Sync同步器 4.1.nonfairTryAcquire 4.2.tryRelease 5.FairSync公平锁 6.NonfairSync非公平锁 7.如何串起来 7.1lock加锁 7.2tryLock尝试加锁 7.3unlock释放锁 7.4Condition 8.总结 引导语 本章的描述思路是先描述清楚 ReentrantLock 的构成组件,然后使用加锁和释放锁的方法把这些组件串起来. 1.类注释 ReentrantLock 中

  • JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】

    本文实例讲述了JavaScript扫雷游戏.分享给大家供大家参考,具体如下: 翻出年初写的游戏贴上来,扫雷相信大家都玩过,先上图: 源码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.or

  • Android编程实现WebView全屏播放的方法(附源码)

    本文实例讲述了Android编程实现WebView全屏播放的方法.分享给大家供大家参考,具体如下: 最近因为项目要用webview加载html5的视频,开始不能全屏播,做了很久才做出来!那按我的理解说下怎么实现全屏吧. 首先写布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.

  • Android编程实现泡泡聊天界面实例详解(附源码)

    本文实例讲述了Android编程实现泡泡聊天界面的方法.分享给大家供大家参考,具体如下: 昨天写了个界面,实现了Android泡泡聊天界面.运行结果如下,点击发送按钮,屏幕就显示Text的内容. 我也是在网上的一份源码的基础上更改的,整个泡泡界面的实现要点: (1)主界面其实就是一个List View (2)文字显示界面其实就使用了android:background="@drawable/incoming"这个东西.背景图片的格式是xxx.9.png,专门用来缩放的,不然显示效果非常

  • jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】

    本文实例讲述了jQuery模拟实现经典FLASH导航动画效果的方法.分享给大家供大家参考,具体如下: 一.前言: FLASH在中国互联网发展初期的时候非常的热,各种各样的矢量造型和动作,加上专门配制的音效,让很多人眼前一亮,并且让很多人迷上了这种新兴的媒体,那时候兴起了很多大大小小的专门发布FLASH的网站,印象中记得的像"FLASH闪吧"."FLASH帝国"."闪客天地"等这些都是很火很热的网站,在当时盛极一时,由此也产生了一大批的专门从事FL

随机推荐