重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
是用JS写的一个浮动窗口,没什么难度,随便去百度搜一搜就能搜到相应的代码!
成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、做网站、成都外贸网站建设公司、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的谢通门网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
1、开发工具
Android Studio: Google 官方放弃 Eclipse 和 Android Studio 普及。AS 虽然不算新,但是对 Android Studio 这个软件的更新速度快的惊人,有大量的新功能发布。例如支持很多注解代码提示注解、Live code template、支持自动生成 Parcelable 实现等等,作为开发者,持续关注这个更新列表 Recent Changes,一定会让写代码的生活更加美好。
2、编程“语言”
Kotlin:作为 Android 领域的 Swift,绝对如沐新风。抛弃沉重的 Java 语法,Kotlin 融入了很多现代编程语言的思想,作为开发者,接受新的语言,了解新语言的发展趋势,更有利于开阔你的思路和加深对语言的理解。在 Android 开发上,使用 Kotlin 并不会付出什么代价,为什么不来试试使用Kotlin进行Android开发。
React Nativ: 跨平台一直是程序员的梦想,而且移动应用的跨平台解决方案也很多,因为 Facebook 的参与和力推,让这个解决方案带上了光环。第一个用 React Native 开发的 App 已经在 Google Play 上架 Facebook 广告管理工具,听说 Android 的 SDK 也马上会到来,React Native。
Sky:与 React Native 类似,使用 Web 开发语言来做移动平台的开发,虽然这个只是一个尝试,但是这是 Google 自身推出的,特别是在 Java 语言的使用上败诉之后,这可能会有一些作为呢,domokit/sky_sdk。
3、开发模式
Dagger 2:依赖注入并不是什么新技术,但是使用在 Android 确实一个新的尝试。Android App 越来越被当成严肃的大型项目来构建,很多在以前大型服务器开发上使用的技术都被应用到了移动开发。Android 开发分模块开发,使用 Dagger 来松耦合模块。特别值得一体的是,Dagger 2 现在由 Google 亲自接管。 Dagger ‡ A fast dependency injector for Android and Java。
MVP:因为 Android 并没有严格的业务和界面区分,项目一复杂,就很容易使代码陷入混乱。现在 Android 开发社区对 MVP 模式讨论越来越热,觉得 MVP 是非常适合 Android APP 开发。MVP for Android: how to organize the presentation layer。
RxAndroid:函数响应式编程(Functional Reactive Programming)也不是新内容,RxAndroid 把 RxJava 带到 Android 环境中。很多时候,编写 Android 程序,也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了:ReactiveX/RxAndroid。
MVVM:这是因为开始官方支持 DataBinding,把 MVVM 直接带到 Android 中。数据绑定在 Windows WPF 和 Web 已经非常常见,它非常高效的开发效率,只关心数据和业务。这也对 Android 开发来说,无疑是一个非常重大的影响:android UI设计MVVM设计模式讨论?。
插件化:针对大型 Android 项目,很多 App 开始使用插件来分模块构建相对独立的功能。
Hybrid:完全使用 HTML 5 开发 App,目前还不成熟。但是折中方案在很多情况下是非常适合的,典型的就是微信,大部分信息展示都是通过 H5 来完成,同时通过 Hybird 方式,把 Web 和 Native 打通,提供给网页访问本地资源的能力。
4、UI设计
Material Design:已经红遍了大江南北,这方面的讨论实在太多了,而且各种支持库都有了,特别是 Google 官方出了一个支持库 Android Design Support Library。
Sketch 3:这是一个专为设计移动端 UI 的设计工具,作为开发者,不用懂那么复杂的 PS 使用,也可以做非常专业设计。
将广告清理干净之后再安装
这种方法,大致思路就是,反编译(编译可以理解为将源代码转化为可运行的程序,反编译就是将程序转化为源代码)APK文件,然后修改XML文件(一般情况下是在反编译出来的res文件夹中的main.xml,通常在layout文件夹,有时候也会放在其他文件夹)将广告信息去掉,最后重新编译为新的APK文件。
下面让说说具体的操作过程,首先需要在电脑上安装Java环境(可以在下载并安装),然后在下载apktool。解压aptool.jar到c:windows,解压apktool-install-windows.zip到任意文件夹(例如D盘根目录)。
运行命令行提示符,用cd命令转到apktool-install-windows所在文件夹(如cd d:/ apktool)。如被嵌入广告的安装文件名为abcd.APK,执行如下命令将abcd.apk反编译到文件夹abcd:
apktool d abcd.apk ABCD
现在打开abcd文件夹,在其中的res文件夹找到main.xml,接下来用记事本来打开,按下“Ctrl+F”找到fill_parent和wrap_content,并将它们都替换为0.0dip,保存退出,再输入以下命令重新编译:
Apktool b ABCD
接下来就可以在ABCDdistout.apk路径下找到重新生成的APK文件了,最后用APKsign等工具为APK文件签名即可使用。
public class ADS1 extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
JLabel mylb1, mylb2, mylb3, mylb4, mylb5;
JTextField myjtf;
JPanel panel1, panel2, panel3, panel4;
JComboBoxString jc1, jc2, jc3, jc4;
JButton b;
JTextArea text;
Font nowfont;
public ADS1()
{
mylb1 = new JLabel("请输入文字:");
mylb2 = new JLabel("请选择字号:");
mylb3 = new JLabel("请选择字体:");
mylb4 = new JLabel("请选择风格:");
mylb5 = new JLabel("请选择颜色:");
myjtf = new JTextField(30);
jc1 = new JComboBox();
jc1.addItem("12");
jc1.addItem("24");
jc1.addItem("36");
jc2 = new JComboBox();
jc2.addItem("宋体");
jc2.addItem("楷体");
jc2.addItem("黑体");
jc3 = new JComboBox();
jc3.addItem("正常");
jc3.addItem("倾斜");
jc3.addItem("加粗");
jc4 = new JComboBox();
jc4.addItem("红色");
jc4.addItem("绿色");
jc4.addItem("蓝色");
b = new JButton("点击生成");
b.addActionListener(this);
text = new JTextArea();
panel1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel3 = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel3 = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel1.add(mylb1);
panel1.add(myjtf);
panel1.add(b);
panel2.add(mylb2);
panel2.add(jc1);
panel2.add(mylb3);
panel2.add(jc2);
panel2.add(mylb4);
panel2.add(jc3);
panel2.add(mylb5);
panel2.add(jc4);
this.add(panel1, BorderLayout.NORTH);
this.add(panel2, BorderLayout.CENTER);
this.add(text, BorderLayout.SOUTH);
this.setTitle("我的JAVA广告屏");
this.setSize(650, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args)
{
new ADS1();
}
@Override
public void actionPerformed(ActionEvent e)
{
if("点击生成".equals(e.getActionCommand()))
{
String size = (String) jc1.getSelectedItem();
String style = (String) jc2.getSelectedItem();
String bold = (String) jc3.getSelectedItem();
String color = (String) jc4.getSelectedItem();
int ibold = Font.PLAIN;
if("正常".equals(bold)) ibold = Font.PLAIN;
else if("倾斜".equals(bold)) ibold = Font.ITALIC;
else if("加粗".equals(bold)) ibold = Font.BOLD;
text.setText(myjtf.getText());
Font font = new Font(style,ibold,Integer.valueOf(size));
text.setFont(font);
text.setEditable(false);
Color icolor = Color.BLACK;
if("红色".equals(color)) icolor = Color.red;
else if("绿色".equals(color)) icolor = Color.green;
else if("蓝色".equals(color)) icolor = Color.blue;
text.setForeground(icolor);;
}
}
}
左栏浮动广告
script language=javascriptvar specialcode="DIV id=searchspe style='Z-INDEX: script language=javascriptvar specialcode="DIV id=searchspe style='Z-INDEX: 100; right: 1px; POSITION: absolute; TOP: 180px;'TABLE cellSpacing=0 cellPadding=0 width=150 style='border-left:1px solid #2E6287;border-top:1px solid #2E6287;border-right:1px solid #2E6287;font-size:12px;color:#ffffff; border-bottom-color:#2E6287; border-bottom-width:1px'TR bgcolor=#2E6287TD height=20 推荐↓/TDTD style='CURSOR: hand' onclick=searchspe.style.visibility='hidden' width=30关 闭/TD/TR/TABLEtable border='1' width='150' height='500' bordercolor='#2E6287'trtd广告内容/td/tr/table/DIV";document.write(specialcode);lastScrollY=0;function heartBeat0(){diffY=document.body.scrollTop;percent=.1*(diffY-lastScrollY);if(percent0)percent=Math.ceil(percent);else percent=Math.floor(percent);document.all.searchspe.style.pixelTop+=percent;lastScrollY=lastScrollY+percent;}window.setInterval("heartBeat0()",1);/script
右栏浮动广告
script language=javascriptvar specialcode="DIV id=searchspe style='Z-INDEX: 100; left: 1px; POSITION: absolute; TOP: 50px;'TABLE cellSpacing=0 cellPadding=0 width=360 style='border-left:1px solid #333333;border-top:1px solid #333333;border-right:1px solid #333333;font-size:12px;color:#ffffff'TR bgcolor=#2E6287TD height=20 推荐↓/TDTD style='CURSOR: hand' onclick=searchspe.style.visibility='hidden' width=30关 闭/TD/TR/TABLEtable border='1' width='150' id='table1' bordercolor='#2E6287' height='500'trtd广告内容/td/tr/table/DIV";document.write(specialcode);lastScrollY=0;function heartBeat0(){diffY=document.body.scrollTop;percent=.1*(diffY-lastScrollY);if(percent0)percent=Math.ceil(percent);else percent=Math.floor(percent);document.all.searchspe.style.pixelTop+=percent;lastScrollY=lastScrollY+percent;}window.setInterval("heartBeat0()",1);/script
左栏固定广告
DIV id=searchspe style='Z-INDEX: 100; left: 1px; POSITION: absolute; TOP: 50px;'TABLE cellSpacing=0 cellPadding=0 width=360 style='border-left:1px solid #333333;border-top:1px solid #333333;border-right:1px solid #333333;font-size:12px;color:#ffffff'TR bgcolor=#2E6287TD height=20 推荐↓/TDTD style='CURSOR: hand' onclick=searchspe.style.visibility='hidden' width=30关 闭/TD/TR/TABLE广告内容/DIV
右栏固定广告
DIV id=searchspe style='Z-INDEX: 100; right: 1px; POSITION: absolute; TOP: 50px;'TABLE cellSpacing=0 cellPadding=0 width=360 style='border-left:1px solid #333333;border-top:1px solid #333333;border-right:1px solid #333333;font-size:12px;color:#ffffff'TR bgcolor=#2E6287TD height=20 推荐↓/TDTD style='CURSOR: hand' onclick=searchspe.style.visibility='hidden' width=30关 闭/TD/TR/TABLE广告内容/DIV
漂浮广告代码
div id="img" style="position:absolute;; width: 200; height: 151"广告内容/div
script LANGUAGE="JavaScript"
var xPos = 20;
var yPos = 10;
img.style.left= xPos;
img.style.top = yPos;
var step = 1;
var delay = 30;
var width,height,Hoffset,Woffset;
var y = 1;
var x = 1;
var interval;
img.visibility = "visible";
function changePos()
{
width = document.body.clientWidth;
height = document.body.clientHeight;
Hoffset = img.offsetHeight;
Woffset = img.offsetWidth;
if (y)
{
yPos = yPos + step;
}
else
{
yPos = yPos - step;
}
if (yPos 0)
{
y = 1;
yPos = 0;
}
if (yPos = (height - Hoffset))
{
y = 0;
yPos = (height - Hoffset);
}
if (x)
{
xPos = xPos + step;
}
else
{
xPos = xPos - step;
}
if (xPos 0)
{
x = 1;
xPos = 0;
}
if (xPos = (width - Woffset))
{
x = 0;
xPos = (width - Woffset);
}
img.style.left = xPos + document.body.scrollLeft;
img.style.top = yPos + document.body.scrollTop;
}
function start()
{
interval = setInterval('changePos()', delay);
}
function pause_resume()
{
clearInterval(interval);
}
start();
/script
固定对联
DIV id=searchspe style='Z-INDEX: 100; right: 5px; POSITION: absolute; TOP: 50px;'TABLE cellSpacing=0 cellPadding=0 width=150 style='font-size:12px;color:#ffffff'TR bgcolor=#C54A00TD height=20 推荐↓/TDTD style='CURSOR: hand' onclick=searchspe.style.visibility='hidden' width=30关 闭/TD/TR/TABLE
广告内容/DIVDIV id=searchspe2 style='Z-INDEX: 100; left: 5px; POSITION: absolute; TOP: 50px;'TABLE cellSpacing=0 cellPadding=0 width=150 style='font-size:12px;color:#ffffff'TR bgcolor=#12BDFFTD height=20 推荐↓/TDTD style='CURSOR: hand' onclick=searchspe2.style.visibility='hidden' width=30关 闭/TD/TR/TABLE
广告内容/DIV
随动对联
script language=javascriptfunction close163news(){searchspe.style.visibility='hidden';searchspe2.style.visibility='hidden';} var specialcode="DIV id=searchspe style='Z-INDEX: 100; right: 1px; POSITION: absolute; TOP: 30px;'TABLE cellSpacing=0 cellPadding=0 width=150 style='font-size:12px;color:#ffffff'TR bgcolor=#C54A00TD height=20 推荐↓/TDTD style='CURSOR: hand' onclick='close163news()' width=30关 闭/TD/TR/TABLE广告内容/DIV";document.write(specialcode);lastScrollX=0;function heartBeat0(){diffY=document.body.scrollTop;percent=.1*(diffY-lastScrollX);if(percent0)percent=Math.ceil(percent);else percent=Math.floor(percent);document.all.searchspe.style.pixelTop+=percent;lastScrollX=lastScrollX+percent;}window.setInterval("heartBeat0()",1);var specialcode2="DIV id=searchspe2 style='Z-INDEX: 100; left: 1px; POSITION: absolute; TOP: 30px;'TABLE cellSpacing=0 cellPadding=0 width=150 style='font-size:12px;color:#ffffff'TR bgcolor=#12BDFFTD height=20 推荐↓/TDTD style='CURSOR: hand' onclick='close163news()' width=30关 闭/TD/TR/TABLE广告内容/DIV";document.write(specialcode2);lastScrollY=0;function heartBeat1(){diffY=document.body.scrollTop;percent=.1*(diffY-lastScrollY);if(percent0)percent=Math.ceil(percent);else percent=Math.floor(percent);document.all.searchspe2.style.pixelTop+=percent;lastScrollY=lastScrollY+percent;}window.setInterval("heartBeat1()",1);/script
qq好友上线广告代码
!-- 代码开始 请将下面的代码放到body结束标签之前--
DIV id=eMeng
style="BORDER-RIGHT: #455690 1px solid; BORDER-TOP: #a6b4cf 1px solid; Z-INDEX: 99999; LEFT: 64px; VISIBILITY: hidden; BORDER-LEFT: #a6b4cf 1px solid; WIDTH: 168px; BORDER-BOTTOM: #455690 1px solid; POSITION: absolute; TOP: 374px; HEIGHT: 115px; BACKGROUND-COLOR: #c9d3f3"
TABLE style="BORDER-TOP: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid"
cellSpacing=0 cellPadding=0 width="100%" bgColor=#cfdef4 border=0
TBODY
TR
TD
style="FONT-SIZE: 12px; BACKGROUND-IMAGE: none; COLOR: #0f2c8c"
width=30 height=24 /TD
TD
style="PADDING-LEFT: 4px; FONT-WEIGHT: normal; FONT-SIZE: 12px; BACKGROUND-IMAGE: none; COLOR: #1f336b; PADDING-TOP: 4px"
vAlign=center width="100%"span class="style13"本站提示/span/TD
TD vAlign=center align=right width=19 2px? padding-top: 2px;
padding-right:SPAN title=关闭
style="FONT-WEIGHT: bold; FONT-SIZE: 12px; CURSOR: hand; COLOR: red; MARGIN-RIGHT: 4px"
onclick=closeDiv()×/SPAN/TD/TR
TR
TD
style="PADDING-RIGHT: 1px; BACKGROUND-IMAGE: none; PADDING-BOTTOM: 1px"
colSpan=3 height=90DIV
style="BORDER-RIGHT: #b9c9ef 1px solid; PADDING-RIGHT: 13px; BORDER-TOP: #728eb8 1px solid; PADDING-LEFT: 13px; FONT-SIZE: 12px; PADDING-BOTTOM: 13px; BORDER-LEFT: #728eb8 1px solid; WIDTH: 100%; COLOR: #1f336b; PADDING-TOP: 18px; BORDER-BOTTOM: #b9c9ef 1px solid; HEIGHT: 100%"
div align="left" span style="text-decoration: none"
FONT
color=#FF0000仿造qq好友上线br
center /center
/FONT/span/div
/DIV/td/tr/table
SCRIPT language=JavaScript
window.onload = getMsg;
window.onresize = resizeDiv;
window.onerror = function(){}
var divTop,divLeft,divWidth,divHeight,docHeight,docWidth,objTimer,i = 0;
function getMsg()
{
try{
divTop = parseInt(document.getElementById("eMeng").style.top,10)
divLeft = parseInt(document.getElementById("eMeng").style.left,10)
divHeight = parseInt(document.getElementById("eMeng").offsetHeight,10)
divWidth = parseInt(document.getElementById("eMeng").offsetWidth,10)
docWidth = document.body.clientWidth;
docHeight = document.body.clientHeight;
document.getElementById("eMeng").style.top = parseInt(document.body.scrollTop,10) + docHeight + 10;// divHeight
document.getElementById("eMeng").style.left = parseInt(document.body.scrollLeft,10) + docWidth - divWidth
document.getElementById("eMeng").style.visibility="visible"
objTimer = window.setInterval("moveDiv()",10)
}
catch(e){}
}
function resizeDiv()
{
try{
divHeight = parseInt(document.getElementById("eMeng").offsetHeight,10)
divWidth = parseInt(document.getElementById("eMeng").offsetWidth,10)
docWidth = document.body.clientWidth;
docHeight = document.body.clientHeight;
document.getElementById("eMeng").style.top = docHeight - divHeight + parseInt(document.body.scrollTop,10)
document.getElementById("eMeng").style.left = docWidth - divWidth + parseInt(document.body.scrollLeft,10)
}
catch(e){}
}
function moveDiv()
{
try
{
if(parseInt(document.getElementById("eMeng").style.top,10) = (docHeight - divHeight + parseInt(document.body.scrollTop,10)))
{
window.clearInterval(objTimer)
objTimer = window.setInterval("resizeDiv()",1)
}
divTop = parseInt(document.getElementById("eMeng").style.top,10)
document.getElementById("eMeng").style.top = divTop - 1
}
catch(e){}
}
function closeDiv()
{
document.getElementById('eMeng').style.visibility='hidden';
if(objTimer) window.clearInterval(objTimer)
}
/SCRIPT
!-- 代码复制结束 --
原因分析: Content 类,并没有被创建, 也没有被使用. 所以无法实现动态效果
解决办法: 在getContentPane().add(label, BorderLayout.CENTER);这句代码后面,添加一行代码
new Thread(new Content()).start();//添加上这句代码
这样就可以创建并启动1个线程去更新文字了...
拓展: 但是使用一个非UI线程去修改Swing的UI,是不推荐的. 对于这种循环更新界面外观, 有1个推荐使用的类javax.swing.Timer; 它相当于一个定时器, 可以按时更新界面外观, 推荐使用.
修改后的代码如下
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;//导入这个类
public class BillBoard extends JFrame {
private static final long serialVersionUID = 1L;
JLabel label;
String[] title;
public BillBoard() {
label = new JLabel();
title= new String[5];
title[0] = "《学通java的二十四堂课》";
title[1] = "《学通jC语言的二十四堂课》";
title[2] = "《学通VC的二十四堂课》";
title[3] = "《学通VB的二十四堂课》";
title[4] = "《学通Php的二十四堂课》";
//窗口属性的设置
setTitle("电子广告牌");
// setBounds(100, 100, 300, 120);//设置位置在(100,100) 宽高(300,120)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// setLayout(new BorderLayout());//默认就是边界布局,可以省略不用指定
setResizable(false);
setSize(300, 120);// 设置宽高
setLocationRelativeTo(null);// 这句代表表示居中了。之前 setBounds里设置的坐标位置100,100就失效了
getContentPane().add(label);// BorderLayout.CENTER 可以省略, 默认就是在 中央
label.setText("明日科技新书推荐:" + title[new Random().nextInt(title.length)]); // 为了更自然, 最开始的时候label也显示下内容
new Timer(1000, new ActionListener() {// 1000 表示,循环间隔时间。actionPerformed方法里写更新UI的代码
@Override
public void actionPerformed(ActionEvent e) {
label.setText("明日科技新书推荐:" + title[new Random().nextInt(title.length)]);
}
}).start(); // start方法, 启动这个定时器
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
BillBoard bb = new BillBoard();
bb.setVisible(true);
}
});
}
}