cordova 手机调试可以设计手机亮度吗

图像的编辑(放大缩小,旋转,偏移,裁剪,以及更改亮度,饱和度)_android开发_ThinkSAAS
图像的编辑(放大缩小,旋转,偏移,裁剪,以及更改亮度,饱和度)
图像的编辑(放大缩小,旋转,偏移,裁剪,以及更改亮度,饱和度)
内容来源: 网络
package eoe.
import java.io.FileNotFoundE
import android.app.A
import android.content.I
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.ColorM
import android.graphics.ColorMatrixColorF
import android.graphics.M
import android.graphics.P
import android.graphics.PorterD
import android.graphics.PorterDuffX
import android.net.U
import android.os.B
import android.provider.MediaS
import android.util.L
import android.view.M
import android.view.MenuI
import android.view.V
import android.widget.B
import android.widget.ImageV
public class PhotoProcess extends Activity{
public static final int FIRST_PIC = 0;
public static final int SECOND_PIC = 1;
public static final int MAX_WIDTH = 240;
public static final int MAX_HEIGHT = 180;
private Button btnSelect,btnSelect2;
private ImageView srcImageView, dstImageV
private Bitmap srcBitmap, dstB
private Uri imageU
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.setContentView(R.layout.process);
this.btnSelect = (Button)this.findViewById(R.id.btn_select);
btnSelect.setOnClickListener(clickListener);
this.btnSelect2 = (Button)this.findViewById(R.id.btn_select2);
btnSelect2.setOnClickListener(clickListener2);
srcImageView = (ImageView)this.findViewById(R.id.img_src);
dstImageView = (ImageView)this.findViewById(R.id.img_dst);
private View.OnClickListener clickListener = new View.OnClickListener() {
public void onClick(View arg0) {
// 启动Gallery应用
Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, FIRST_PIC);
private View.OnClickListener clickListener2 = new View.OnClickListener() {
public void onClick(View arg0) {
// 启动Gallery应用
Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, SECOND_PIC);
public boolean onCreateOptionsMenu(Menu menu){
//super.onCreateOptionsMenu(menu);
//MenuInflater menuInflater = new MenuInflater(this);
//menuInflater.inflate(R.layout.image, menu)
menu.add(Menu.NONE,1,Menu.NONE,"复制");
menu.add(Menu.NONE,2,Menu.NONE,"变换");
menu.add(Menu.NONE,3,Menu.NONE,"亮度");
menu.add(Menu.NONE,4,Menu.NONE,"合成");
return super.onCreateOptionsMenu(menu);
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
switch(id){
//复制一个图像
if(srcBitmap != null){
dstBitmap = getDstImage(null);//这里没有变换
dstImageView.setImageBitmap(dstBitmap);
//对复制后的图像进行变换
if(srcBitmap != null){
dstBitmap = transferImage();
dstImageView.setImageBitmap(dstBitmap);
//改变图像的色彩
if(srcBitmap != null){
dstBitmap = ajustImage();
dstImageView.setImageBitmap(dstBitmap);
if(srcBitmap != null && dstBitmap != null){
dstBitmap = compositeImages();
dstImageView.setImageBitmap(dstBitmap);
private Bitmap getDstImage(Matrix matrix){
Bitmap bmp =
//下面这个Bitmap中创建的函数就可以创建一个空的Bitmap
//返回的是一个可以改变的Bitmap对象,这样我们后面就可以对其进行变换和颜色调整等操作了
bmp = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
//创建Canvas对象,
Canvas canvas = new Canvas(bmp);
//创建Paint对象,这里先不用
Paint paint = new Paint();
//在Canvas上绘制一个已经存在的Bitmap。这样,dstBitmap就和srcBitmap一摸一样了
if(matrix != null){
//如果matrix存在,则采用变换
canvas.drawBitmap(dstBitmap, matrix, paint);
canvas.drawBitmap(srcBitmap, 0, 0, paint);
* 重载getDstImage函数,传入定制的Paint对象
* @param matrix
* @param paint
private Bitmap getDstImage(Matrix matrix, Paint paint){
Bitmap bmp =
//下面这个Bitmap中创建的函数就可以创建一个空的Bitmap
//返回的是一个可以改变的Bitmap对象,这样我们后面就可以对其进行变换和颜色调整等操作了
bmp = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
//创建Canvas对象,
Canvas canvas = new Canvas(bmp);
//在Canvas上绘制一个已经存在的Bitmap。这样,dstBitmap就和srcBitmap一摸一样了
if(matrix != null){
//如果matrix存在,则采用变换
canvas.drawBitmap(dstBitmap, matrix, paint);
canvas.drawBitmap(srcBitmap, 0, 0, paint);
* 为了放大缩小、旋转图像,我们要使用Matrix类。Matrix类是一个三维矩阵。
* 在Android屏幕中,图像的每个像素对应都是一个坐标,一个坐标由x/y/z组成
* cosX -sinX translateX
* sinX cosX translateY
* 0 0 scale
* 第一行的值,影响着x坐标。比如 1 0 0 =&x = 1*x + 0*y + 0*z
* 第二行的值,影响着y坐标。比如0 1 0 =& y = 0*x + 1*y + 0*z
* 第三行的值,影响着z坐标。比如 0 0 1 =& z = 0*x + 0*y + 1*z
* 我们自己计算一个矩阵然后通过Matrax.setValues设置。
* 这样,在调用canvas的drawBitmap方法时,传入matrix
* Matrix类并不提倡我们使用这种方式来操作变换,Matrix针对不同的变换都相应的有pre,set,post三种方法
* 可以使用。
* pre是矩阵前乘
* set是直接设置
* post是矩阵后乘
private Bitmap transferImage(){
Matrix matrix = new Matrix();
matrix.setValues(new float[]{ .5f,0,0,
//这里只会影响到x轴,所以,图片的长度将是原来的一半
return this.getDstImage(matrix);
* 该方法中我们将对图像的颜色,亮度,对比度等进行设置
* 需要用到ColorMatrix类。ColorMatrix类是一个四行五列的矩阵
* 每一行影响着[R,G,B,A]中的一个
* a1 b1 c1 d1 e1
* a2 b2 c2 d2 e2
* a3 b3 c3 d3 e3
* a4 b4 c4 d4 e4
* Rnew =& a1*R+b1*G+c1*B+d1*A+e1
* Gnew =& a2*R+b2*G+c2*B+d2*A+e2
* Bnew =& a3*R+b3*G+c3*B+d3*A+e3
* Gnew =& a4*R+b4*G+c4*B+d4*A+e4
* 其中R,G,B的值是128,A的值是0
* 最后将颜色的修改,通过Paint.setColorFilter应用到Paint对象中。
* 主要对于ColorMatrix,需要将其包装成ColorMatrixColorFilter对象,再传给Paint对象
* 同样的,ColorMatrix提供给我们相应的方法,setSaturation()就可以设置一个饱和度
private Bitmap ajustImage(){
ColorMatrix cMatrix = new ColorMatrix();
// int brightIndex = -25;
// int doubleColor = 2;
// cMatrix.set(new float[]{
// doubleColor,0,0,0,brightIndex,
//这里将1改为2则我们让Red的值为原来的两倍
// 0,doubleColor,0,0,brightIndex,
//改变最后一列的值,我们可以不改变RGB同道颜色的基础上,改变亮度
// 0,0,doubleColor,0,brightIndex,
// 0,0,0,doubleColor,0
//cMatrix.setSaturation(2.0f);//设置饱和度
cMatrix.setScale(2.0f, 2.0f, 2.0f, 2.0f);
//设置颜色同道色彩缩放
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
return this.getDstImage(null, paint);
* 图像的合成,可以通过在同一个Canvas中绘制两张图片。
* 只是在绘制第二章图片的时候,需要给Paint指定一个变幻模式TransferMode。
* 在Android中有一个XFermode所有的变幻模式都是这个类的子类
* 我们需要用到它的一个子类PorterDuffXfermode,关于这个类,其中用到PorterDuff类
* 这个类很简单,就包含一个Enum是Mode,其中定义了一组规则,这组规则就是如何将
* 一张图像和另一种图像进行合成
* 关于图像合成有四种模式,LIGHTEN,DRAKEN,MULTIPLY,SCREEN
private Bitmap compositeImages(){
Bitmap bmp =
//下面这个Bitmap中创建的函数就可以创建一个空的Bitmap
bmp = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
Paint paint = new Paint();
Canvas canvas = new Canvas(bmp);
//首先绘制第一张图片,很简单,就是和方法中getDstImage一样
canvas.drawBitmap(srcBitmap, 0, 0, paint);
//在绘制第二张图片的时候,我们需要指定一个Xfermode
//这里采用Multiply模式,这个模式是将两张图片的对应的点的像素相乘
//,再除以255,然后以新的像素来重新绘制显示合成后的图像
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
canvas.drawBitmap(dstBitmap, 0, 0, paint);
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
Log.v("Result OK Value:", resultCode+"");
Log.v("RequestCode Value", requestCode+"");
if(resultCode == RESULT_OK){
imageUri = data.getData();
if(requestCode == FIRST_PIC){
//在Gallery中选中一个图片时,返回来的Intent中的Data就是选择图片的Uri
srcBitmap = getSrcImage(imageUri);
srcImageView.setImageBitmap(srcBitmap);
}else if(requestCode == SECOND_PIC){
//这里处理用户选择的第二张图片
dstBitmap = getSrcImage(imageUri);
dstImageView.setImageBitmap(dstBitmap);
* 需要加载的图片可能是大图,我们需要对其进行合适的缩小处理
* @param imageUri
private Bitmap getSrcImage(Uri imageUri){
//Display display = this.getWindowManager().getDefaultDisplay();
BitmapFactory.Options ops = new BitmapFactory.Options();
ops.inJustDecodeBounds =
Bitmap bmp = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(imageUri),null,ops);
int wRatio = (int)Math.ceil(ops.outWidth/(float)MAX_WIDTH);
int hRatio = (int)Math.ceil(ops.outHeight/(float)MAX_HEIGHT);
if(wRatio & 1 && hRatio & 1){
if(wRatio & hRatio){
ops.inSampleSize = wR
ops.inSampleSize = hR
ops.inJustDecodeBounds =
bmp = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(imageUri),null,ops);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e(this.getClass().getName(), e.getMessage());
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信非常简单,只需要在config.xml里加上这行:&preference name="Orientation" value="landscape" /&Orientation的值orentation的默认值是default。 可使用的值有:default, landscape, portait orentation可以将设备锁定方向,不受设备旋转影响。 对于IOS支持landscape&portait,可以使用平台专属值『all』关于preference的官网:https://cordova.apache.org/docs/en/dev/config_ref/index.html#preference
最新教程周点击榜
微信扫一扫移动混合开发(1)
本文在CSDN博客首发
转载请注明出处
Cordova常用插件简介
最近研究的混合移动应用开发,PhoneGap在使用过程中经常用的插件给大家一个简介。还有很多插件大家可以去查找
cordova-plugin-app-version
获取当前应用的版本号
cordova-plugin-network-information
获取网络连接信息
cordova-plugin-geolocation
获取GPS数据
cordova-plugin-dialogs
调用本地的对话框
cordova-plugin-device
获取设备信息
cordova-plugin-file
在设备上读/写
cordova-plugin-camera
调用设备上的摄像头
cordova-plugin-file-transfer
文件上传或者下载
cordova-plugin-splashscreen
控制应用的启动画面
cordova-plugin-contacts
获取设备上联系人的信息
phonegap-plugin-barcodescanner
二维码扫描和创建
ionic-plugin-keyboard
调用系统默认键盘
com.plugin.shortcut
android系统可以在桌面创建快捷方式
cordova-plugin-baidupush
cordova-plugin-brightness
可以调整设备亮度
cordova-plugin-console
ios平台可以打印log日志
cordova-plugin-crosswalk-webview
代替android原生webview
package/cordova-plugin-screen-orientation
设备屏幕方向
cordova-plugin-tts
文本转语音
cordova-plugin-whitelist
访问外部链接
cordova-plugin-device-orientation
使用罗盘设备
cordova-plugin-inappbrowser
打开新的浏览器窗口(设备默认浏览器)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3481次
排名:千里之外
原创:13篇
(2)(3)(2)(2)(1)(2)(1)应用程序开发: Cordova vs React Native vs Xamarin vs DIY - 技术翻译 - 开源中国社区
应用程序开发: Cordova vs React Native vs Xamarin vs DIY
【已翻译100%】
英文原文:
推荐于 10个月前 (共 11 段, 翻译完成于 06-27)
参与翻译&(3人)&: ,
你还在通过编写本地的iOS或Android代码来创建移动应用程序吗?对于那些平台特定的编程语言和工具、技能集问题、程序有非常具体的需要或者只是无知,或许这才是永远的爱。该是我们重新审视移动应用程序开发、选择合适的工具和框架集的时候了,以使我们的工作有更高的投资回报率(ROI)和更快的开发速度。
我和周围的很多开发者聊过,他们绝大多数都不喜欢用本地iOS(Swift、object C)、android(java)或者Windows(.Net)特定的编程语言和工具开发移动应用程序,因为他们的程序设计目标是多平台。原因在于本地开发需要每个平台对应自己特定的技能集,通常需要更多的开发努力。
几个月前,我们开始使用React Native,必须承认对于应用程序(app)开发来说,它的功能非常强大,使用起来也很愉快。自从Facebook用React native实现了对Android的支持起,我们基本上接受了它。尽管如此,React Native并非独一无二,还有另外一些很棒的选项,比如Xamarin。对于快速移动应用程序开发来说,Xamarin是一种功能最丰富、易于创建和使用的平台。
我在这里不会涉及所有可选的移动应用程序开发平台,只是分别用一个有代表性的平台来说明不同的开发方法,以便让你理解每一种开发方法的概念和方法论。
&翻译得不错哦!
移动应用程序开发-平台的选择
说起移动应用程序开发,自然界中有许多平台和工具可以使用。在过去的几周里,我对各种开发方法进行了评估,并得出结论,有五种开发方法可供选择,列举如下:
Cordova :基于混合模式移动应用开发(Hybrid app)
使用React Native进行移动应用程序开发&
使用Xamarin进行移动应用程序开发&
DIY (Do It Yourself)工具:最后但并非最不重要
所有的工具都可以划归到上面提及的某一类中,它们提供了不同的功能集,需要特定的技能集来进行移动应用的设计与开发。在长期的移动应用开发策略中,首先选择正确的工具/平台是非常关键的因素。
&翻译得不错哦!
选择哪个移动app开发更好?
选择不同的本地代码开发具有他们自己的优势和背后的道理。没有任何一个工具或者方法注定就是赢家,由于它依赖多种因素。在选择一个特定app开发平台或者方法最重要的因素依赖下面的关键点——
个人或者开发团队的技能
app独一无二的需求
目标用户划分
个人或者组织的长期策略视野
如果你只是在一个特定平台开发apps,那使用native(swift,objective c 开发ios,java开发android)是最佳选择,因为你可以获得最佳性能、最新的APIs和工作特征。
你只是选择一个平台,那么,不必担心代码的复用。偏离本地主要理由是开发团队的技能,虽然不是唯一的一个。
让我们看看本地开发不同选择的替代方面。
&翻译得不错哦!
基于Cordova的移动App开发
混合App开发使用纯的JavaScript、HTML和CSS ,它是最容易和最流行的开发方法之一,它在过去的网络开发中处于优势地位。有大量的框架采用了古老的纯的JavaScript和CSS,这些框架可以让你很轻松地进行移动App开发;其中的一些框架包括Ionic, kendo UI和 jQuery Mobile。
当然,你也可以选择不使用已有的框架,而是使用纯净的JavaScript、HTML和CSS,从头开始构建你的App部件。然而,使用像&Ionic、Kendo UI、 jQuery Mobile、 Onesen UI或者其它任何一种建立好的框架都会使你的开发时间以指数方式减少。
你或许想要查看这篇热门文章 -
你的App如何访问硬件组成呢?
Cordova该要出场了。它提出了统一的JavaScript API,使用这些API可以访问像摄像头和加速度传感器一类的设备功能,在Android、iOS和Windows这样的几乎所有平台上都有加速度传感器。你一旦准备好App,就可以使用Cordova对其进行编译,Cordova会将App连同特定的JavaScript、CSS和HTML一起打包进平台特定的容器(webview)中。该容器在你的程序和硬件组成之间通过统一的JavaScript API架起了一座桥梁。
&翻译得不错哦!
你得到的最大好处是只需要开发和维护单一的代码库,还有就是,如果你已经是一名Web开发者,就无需学习任何新技术了。
这里需要注意的关键点是程序运行在webview容器中,而并非运行在硬件本地,这使得它在性能上比原生Android程序或原生iOS程序要差。但是,所有的App并不都需要超级性能,对此你要首先做出权衡和决定。
Cordova遵循Apache许可证,自由且开源,它由Apache软件基金会发布。要阅读更多有关Cordova的内容可访问。
使用React Native进行移动App开发
对于快速移动程序开发来说,React native相对较新,但却是一种优秀的开发方法,iOS和Android均可以使用。最近已增加了对于Android的支持。React native是来自于Facebook的开源框架,用来开发原生iOS和Android App。
尽管React Native是市场中的新成员,但是在全球范围内许多开发者和组织已经开始使用它进行跨平台移动App的开发,有一些App范例,比如SoundCloud Pulse、 Discovery VR、Facebook Ads Manager、 Bit Wallet、 Squad、Myntra和Running。
&翻译得不错哦!
React native同样基于JavaScript,但只是纯的JavaScript、HTML5和CSS没有太多帮助,你需要投入一些时间学习更多的东西。你需要理解React,它是facebook为了开发网络程序于2013年发布的框架,React native是React本身的扩展,它们使用了同样的开发理念。
除了React框架,你还需要理解JSX,JSX是对ECMAScript进行了语法扩展的类XML。一旦你对JSX上了手,那么编写React native UI组件将变得绝对轻而易举。你也需要使用Xcode,它是用来构建Android版本App所需的iOS模拟器和命令行工具。另外,掌握程序架构框架的知识将有助于组织并加速App的开发,这些知识比如有Flux和与之相关联的类似Redux和Reflux这样的包。
React Native和Cordova或PhoneGap之间的比较
在Cordova中基于混合程序使用HTML和JavaScript组件开发的UI运行在Android和iOS平台的webview(内嵌在浏览器中)容器中。在React Native中同样如此,UI是用JavaScript react组件(JSX扩展)编写的,只不过每个React native UI组件和iOS以及Android的原生UI组件都是对应的。因此,用JavaScript编写的组件要转换成原生组件。这样我们就拥有了访问底层平台原生组件的JavaScript代码接口。
&翻译得不错哦!
例如:创建标签-在react native中用TabBarIOS组件实现iOS中的UITabBar,用DrawerLayoutAndroid组件实现Android中的抽屉(Drawer)效果。
上面的例子也说明使用react native在Android和iOS之间的代码重用并非纯粹的100%,但是根据开发内容的不同,能够达到85%-100%这样的目标。
使用react native最大的好处在于仅仅使用JavaScript就可以同时开发iOS和Android版本的App。理念就是-“仅学习一次,就可以编写任何平台,并达到代码重用的最大化”。
更多有关React Native的知识可访问&。
使用Xamarin进行移动app开发
Xamarin是用于构建原生移动App的另一平台,它是用于构建App的最有用的平台之一。使用Xamarin,可以通过C#语言编写原生Android、iOS、windows和Mac程序。
Xamarin的开发理念和React native基本一样,但是对技能集的要求有了彻底的改变,因为不再使用JavaScript,而是要使用C#和Microsoft工具。代码也不能100%重用,但80%的目标可以很容易达到。
&翻译得不错哦!
使用Xamarin编写程序不是最容易的,但是可以让你编写出高性能的移动程序。用C#编写代码时,Xamarin编译器将代码编译成iOS、Android或者Windows Phone各自平台的原生包。对于iOS,会将代码直接编译成ARM汇编代码,所以它是纯碎的原生程序。
Xamarin.forms是由Xamarin团队最新推出的又一个功能,使用它开发原生的Android、iOS或Windows程序可以达到100%的代码重用。这些界面的UI控件在运行时会映射成原生控件,因此100%的代码重用是可能的。尽管它没有涵盖全部的原生控件,但已涵盖编写程序时要用到的90%的控件。
Xamarin是Microsoft收养的孩子。Microsoft最近收购了Xamarin,自此以后,Xamarin的用途会进一步增强,更多的功能会比以前增加的更快。
C#开发者可以自如地使用其中一个最高级的IDE-visual studio进行程序开发。Mac用户也可以使用具有相同丰富特性的Xamarin studio进行开发。
了解更多有关Xamarin的信息可以访问。
&翻译得不错哦!
使用DIY的APP构建工具进行移动APP开发
你自己的工具不够创新或者无法开发新的应用程序,但是,在短期内这些非常有利于从应用市场获取一个app。这些工具封装了大量模板,正在等待在苹果的应用市场或者谷歌play发布。
这些工具大多数是基于云app开发平台,保障你不用担忧要建立你的系统来构建移动应用。你自己的工具提供直观的app接口就可以用来构建app,不用任何先前的开发经验。
你可以选择一个app模板,以你的方式去自定义和配置他,全部使用你自己的设置。个人与小企业使用这些工具来创建移动apps, 并且更加快速推向市场。
UI/UX设计师总是依赖程序员来实现他们梦寐以求的app以推向市场,但是当今时代,UI/UX设计师可以使用拖拽和摆放工具来创建移动apps,向开发者边缘化。图像设计师可以采用app模板来创建和混合出漂亮好看的图形,使得app看起来独一无二(虽然不仅如此)。品牌与品牌之间的联系具体的图形和颜色,使得app独一无二。
在这个节奏快速的世界,当你的目标是创收,那它可能不总是专注于创新和创造,从零开始建立应用程序,使用现有的app模板来订制您的或者您的客户的需求,这样可能会更加高效。
你可能想查看这篇流行的文章-.
&翻译得不错哦!
应用开发和许多平台的选择都有很多的方法论,没有哪个是通用的。
很多开发者就是爱 Java ,并且持续用 Java 开发安卓应用,不认为有什么其他的选项,同样在&Objective-C 的开发者中也这样。不可否认,本地 app 开发带来的最佳性能和流畅体验。
随着像&Ionic,Onsen UI, Intel XDK 和 Sencha Touch 这些的混合框架的出现, Web 开发者变成移动开发者将不会有任何困难。所有这些框架的处理几乎都是与 JavaScript,CSS 和 HTML 相关,并且支持几乎所有的移动平台。
&翻译得不错哦!
我们的翻译工作遵照 ,如果我们的工作有侵犯到您的权益,请及时联系我们
大众型的项目用这个就不合适了,企业因为可以指定使用的设备。说白就是设备差异导致性能完全不一样

我要回帖

更多关于 cordova 手机键盘 的文章

 

随机推荐