当前位置:  编程技术>移动开发
本页文章导读:
    ▪旋转图片的几种形式        旋转图片的几种方式 一、每次根据旋转矩阵从原位图创建出旋转后的新位图。但是缺点就是要船舰新的位图。// createa matrix for the manipulationMatrix matrix = new Matrix();// rotate the Bitmapmatrix.postRota.........
    ▪ 【转】简单明了SDK2.2.1无99刀证件真机运行方法图文教程        【转】简单明了SDK2.2.1无99刀证书真机运行方法图文教程 http://www.cocoachina.com/bbs/read.php?tid-3491.html   虽然俺是iphone开发新手(上周五才第一次hello world),不过玩iphone时间不短了,破解了cydia.........
    ▪ Java串行通讯,控制打印机       Java串行通信,控制打印机 [size=small;]1、准备:[/size]    1)、下载javacomm:     需要到其官方主页http://java.sun.com/products/javacomm/下载这个API,目前的最新版本是3.0。不过可惜的是,Sun目前没.........

[1]旋转图片的几种形式
    来源: 互联网  发布时间: 2014-02-18
旋转图片的几种方式
一、每次根据旋转矩阵从原位图创建出旋转后的新位图。但是缺点就是要船舰新的位图。
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// rotate the Bitmap
matrix.postRotate(45);

// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
width, height, matrix, true);

// make a Drawable from Bitmap to allow to set the BitMap
// to the ImageView, ImageButton or what ever
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);

二、将旋转图片转为旋转画布。效率较高。Android官方Demo:LunarLander正是旋转画布,从而达到旋转图片,但是从效果上看,有些失真。(旋转图片时,一般旋转中心为图片的中心。)
(旋转方向为顺时针,若角度为负则为逆时针)

//注意画布的状态保存和恢复
canvas.save();
//参数分别为:旋转角度,图片X中心,图片Y中心。
canvas.rotate(angle, getCenterX(),getCenterY());
spriteImage.setBounds(bounds);
spriteImage.draw(canvas);
canvas.restore();
1 楼 pop0068 2011-02-03  
采用第一种方式旋转,图片会产生“微小的位置变化”,不知楼主是否有此问题?
2 楼 a526001650a 2012-05-04  
这人发贴只发一点,典型的不懂装懂,直接复制别处的东西当成是自己的。

    
[2] 【转】简单明了SDK2.2.1无99刀证件真机运行方法图文教程
    来源: 互联网  发布时间: 2014-02-18
【转】简单明了SDK2.2.1无99刀证书真机运行方法图文教程

http://www.cocoachina.com/bbs/read.php?tid-3491.html

 

虽然俺是iphone开发新手(上周五才第一次hello world),不过玩iphone时间不短了,破解了cydia里的软件也有N多(罪过罪过),所以对于真机运行程序有一些经验积累。
在cocoachina混迹没几天,看到N多朋友问如何真机跑程序。论坛的老大也有整理真机跑的方法,不过貌似很多同学有怀疑,而且有人说sdk2.2.1上不行。
俺目前的环境是:kalyway mac os 10.5.2,SDK2.2.1,脱狱的2.2固件iphone,做了四五个小程序,全部真机成功跑起来。
其实方法跟老大们的一样(基本原理都是那回事),重新总结一下:

1.脱狱过的iphone,应该都有cydia,到cydia里装link identity editor,也就是传说中的ldid 
 

2.在你的xcode里打开工程,将编译选项选为device 2.1 release(必须选2.1,不用担心,2.1编译可以在2.2.x固件完美运行) 
 

3.在xcode里,project菜单->Edit Project Setting 
 

4.在打开的设置窗口里,找到Code Signing 部分,在Any iPhone OS Device 的值那里,点击弹出菜单选Other 
5.新弹出的窗口里,默认有iPhone Developer,将内容删除,OK。这一步,也有的老大是通过直接修改工程文件实现的,但是我不太喜欢为了改这个单独在开个文本编辑器去,既然在xcode里能改,就不切换来切换去了,哈哈。
 


6.关闭设置菜单,小花+B编译。没问题的话,应该就可以编译通过了。
7.把build/release-iphoneos/下的programname.app文件夹复制到iphone的/Applications文件夹内。
8.SSH到iphone里,进入/Applications/programname.app文件夹
9.ldid -S programname 这里一定要用大写的S参数!很多同学签不上,是因为用的小写s。
10.chmod 755 programname,给程序设置执行权限。


 

11.respringboard之后,程序图标会出现在springboard上,真机运行吧:)

ssh killall SpringBoard 就ok.

 


然后进入到HelloiPhone.app所在的目录。运行下面的命令
$ scp -r HelloiPhone.app root@192.168.0.2:/Applications/
$ ssh root@192.168.0.2
[备注,密码默认是alpine]
$ cd /Applications/HelloiPhone.app 
$ chmod 755 HelloiPhone 
$ ldid -S HelloiPhone
$ killall SpringBoard


    
[3] Java串行通讯,控制打印机
    来源: 互联网  发布时间: 2014-02-18
Java串行通信,控制打印机

[size=small;]1、准备:[/size]
   1)、下载javacomm:
    需要到其官方主页http://java.sun.com/products/javacomm/下载这个API,目前的最新版本是3.0。不过可惜的是,Sun目前没有推出此API在Windows平台下的3.0版本,主页上列出的三个版本,分别是运行在x86和Sparc结构下的Solaris系统,以及x86下的Linux系统。要下载Windows版本只能去寻找较老的版本了。我所找到的2个网址是
http: //llk.media.mit.edu/projects/cricket/software/javaSerial.zip (两个文件夹里面有所需的 3个文件),http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip和(完整的2.0版本,还有 examples)。

   2)、安装
    这里的所谓安装就是把三个重要的文件放到指定的目录下。
    将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\lib;文件 javax.comm. properties拷贝到%JAVA_HOME%\lib; 文件win32comm.dll拷贝到%JAVA_HOME%\bin。注意%JAVA_HOME%是jre的路径。

[size=small;]2、javax.comm简介:[/size]
    在javax.comm下有13个类和接口,分别是

  4个接口
    CommDriver 可负载设备(the loadable device)驱动程序接口的一部分
    CommPortOwnershipListener 传递各种通讯端口的所有权事件
    ParallelPortEventListener 传递并行端口事件
    SerialPortEventListener 传递串行端口事件

  6个类
    CommPort 通讯端口
    CommPortIdentifier通讯端口管理
    ParallelPort 并行通讯端口
    ParallelPortEvent 并行端口事件
    SerialPort RS-232串行通讯端口
    SerialPortEvent 串行端口事件

  3个异常类
    NoSuchPortException 当驱动程序不能找到指定端口时抛出
    PortInUseException 当碰到指定端口正在使用中时抛出
    UnsupportedCommOperationException 驱动程序不允许指定操作时抛出

    API文档:http://java.sun.com/products/javacomm/reference/api/index.html


[size=small;]3、实例:[/size]
1)、Write:
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;

import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.UnsupportedCommOperationException;


public class Write {
private Enumeration portList ;
private CommPortIdentifier portId ;
private SerialPort serialPort ;
private OutputStream os ;

public Write(String message){
/*
* 不带参数的getPortIdentifiers方法获得一个枚举对象,该对象又包含了系统中管理每个端口的CommPortIdentifier对象。
* 注意这里的端口不仅仅是指串口,也包括并口。这个方法还可以带参数。getPortIdentifiers(CommPort)获得与已经被应用
* 程序打开的端口相对应的CommPortIdentifier对象。 getPortIdentifier(StringportName)获取指定端口名(比如“COM1”)
* 的CommPortIdentifier对象。
*/
portList = CommPortIdentifier.getPortIdentifiers() ;
while(portList.hasMoreElements()){
portId = portList.nextElement();
if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
/*
* 找Windows下的第一个串口
*/
if(portId.getName().equalsIgnoreCase("COM1")){
/*
* 找Unix-like系统下的第一个串口
*/
// if (portId.getName().equals("/dev/term/a")) {
try{
/*
* open方法打开通讯端口,获得一个CommPort对象。它使程序独占端口。如果端口正被其他应用程序占用,将使用
* CommPortOwnershipListener事件机制,传递一个PORT_OWNERSHIP_REQUESTED事件。每个端口都关联一个
* InputStream和一个OutputStream。如果端口是用open方法打开的,那么任何的getInputStream都将返回相同的数据
* 流对象,除非有close被调用。有两个参数,第一个为应用程序名;第二个参数是在端口打开时阻塞等待的毫秒数。
*/
serialPort = (SerialPort) portId.open("Write", 2000) ;
/*
* 设置串口初始化参数,
* 依次是波特率
* 数据位
* 停止位和校验
*/
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
os = serialPort.getOutputStream() ;
os.write(message.getBytes()) ;
os.close() ;
serialPort.close() ;
}catch (PortInUseException e) {
System.out.println("COM1 正被使用!") ;
e.printStackTrace() ;
} catch (IOException e) {
System.out.println("获取输出流失败");
e.printStackTrace();
} catch (UnsupportedCommOperationException e) {
System.out.println("串行口初始化异常");
e.printStackTrace();
}
}
}
}
}
}

2)、Read:
import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleRead implements Runnable, SerialPortEventListener {

static CommPortIdentifier portId;
static Enumeration portList;// 枚举类

InputStream inputStream;
SerialPort serialPort;
Thread readThread;

public static void main(String[] args) {
/*
* 不带参数的getPortIdentifiers方法获得一个枚举对象,该对象又包含了系统中管理每个端口的CommPortIdentifier对象
* 。 注意这里的端口不仅仅是指串口,也包括并口。这个方法还可以带参数。getPortIdentifiers(CommPort)获得与已经被应
* 用程序打开的端口相对应的CommPortIdentifier对象。
* getPortIdentifier(StringportName)获取指定端口名(比如“COM1”)
* 的CommPortIdentifier对象。
*/
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)/* getPortType方法返回端口类型 */{
/* 找Windows下的第一个串口 */
// if (portId.getName().equals("COM1")){
/*
* 找Unix-like系统下的第一个串口
*/
if (portId.getName().equals("/dev/term/a")) {
Read reader = new Read();
}
}
}
}

public Read() {
try {
/*
* open方法打开通讯端口,获得一个CommPort对象。它使程序独占端口。如果端口正被其他应用程序占用,将使用
* CommPortOwnershipListener事件机制
* ,传递一个PORT_OWNERSHIP_REQUESTED事件。每个端口都关联一个
* InputStream和一个OutputStream
* 。如果端口是用open方法打开的,那么任何的getInputStream都将返回相同的数据
* 流对象,除非有close被调用。有两个参数,第一个为应用程序名;第二个参数是在端口打开时阻塞等待的毫秒数。
*/
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
} catch (PortInUseException e) {
}
try {
inputStream = serialPort.getInputStream();/* 获取端口的输入流对象 */
} catch (IOException e) {
}
try {
/* 注册一个SerialPortEventListener事件来监听串口事件 */
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
}

serialPort.notifyOnDataAvailable(true);/* 数据可用 */

try {
/*
* 设置串口初始化参数, 依次是波特率 数据位 停止位和校验
*/
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {
}

readThread = new Thread(this);
readThread.start();
}

public void run() {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
}
}

// 串口事件
public void serialEvent(SerialPortEvent event) {

switch (event.getEventType()) {
case SerialPortEvent.BI:/* Break interrupt,通讯中断 */
case SerialPortEvent.OE:/* Overrun error,溢位错误 */
case SerialPortEvent.FE:/* Framing error,传帧错误 */
case SerialPortEvent.PE:/* Parity error,校验错误 */
case SerialPortEvent.CD:/* Carrier detect,载波检测 */
case SerialPortEvent.CTS:/* Clear to send,清除发送 */
case SerialPortEvent.DSR:/* Data set ready,数据设备就绪 */
case SerialPortEvent.RI:/* Ring indicator,响铃指示 */
/*
* Output buffer is empty,输出缓冲区清空
*/
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
/*
* Data available at the serial port,端口有可用数据。读到缓冲数组,输出到终端
*/
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[20];

try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
}
System.out.print(new String(readBuffer));
} catch (IOException e) {
}
break;
}
}
}

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
技术文章 iis7站长之家
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3