当前位置:  编程技术>移动开发
本页文章导读:
    ▪腾挪开发平台网络引擎的开发概述(1)        移动开发平台网络引擎的开发概述(1) 做Symbian的网络开发将近一年,在程序网络模块的开发上还是有一些心得的。和大家分享一下。如何设计一个可靠的,并且能够良好移植的网络引擎,.........
    ▪ Graphics-ColorFilter        Graphics-----ColorFilter 1.使用ColorFilter MaskFilter是对一个Paint的alpha通道的转换,而ColorFilter则是对每一个RGB通道应用转换 。所有由ColorFilter所派生的类在执行它们的转换时,都会忽略alpha通道。 And.........
    ▪ Graphics-Shader       Graphics---Shader Shader类的派生类可以创建允许使用多种固体颜色填充绘图对象的Paint。 对Shader最常见的使用是定义渐变填充;渐变是在2D图像中添加深度和纹理的最佳方式之一。Android包含了一.........

[1]腾挪开发平台网络引擎的开发概述(1)
    来源: 互联网  发布时间: 2014-02-18
移动开发平台网络引擎的开发概述(1)
做Symbian的网络开发将近一年,在程序网络模块的开发上还是有一些心得的。和大家分享一下。

如何设计一个可靠的,并且能够良好移植的网络引擎,简单的说有三点:

1.有一个底层http模块(Net),该模块负责具体的接入点选择,网络报文的组装,收发,超时控制,差错处理。
2.在Net模块之上,有一个引擎模块(Engine),负责控制程序的流程,业务的走向。
3.Net模块和Engine模块有低耦合的回调通信机制,即net模块可以将收到的数据顺利的提交给Engine进行处理,但不依赖于Engine.

手机操作系统肯定会提供http的库,不要告诉我你一直用的socket做网络,http库相对最基本的socket主要提供了一个报文解析,你不需要手动去解析http header&body里面的各项参数和内容,一般会有框架给的一个专门的回调函数把这些值传给我们,以symbian为例
void CMyHttpModule::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
{
	switch (aEvent.iStatus) 
	{
	case THTTPEvent::EGotResponseHeaders:
		{			
			RHTTPResponse resp = aTransaction.Response();
			TInt status = resp.StatusCode();
			if (status != 200)
			{
				aTransaction.Close();
				return;
			}
		}		
		break;
		
	case THTTPEvent::EGotResponseBodyData:
		break;

	case THTTPEvent::EResponseComplete:
		break;

	case THTTPEvent::ESucceeded:
		break;
	case THTTPEvent::EFailed:
		break;

	default:
		break;
	}
}


MHFRunL就是系统框架在收到报文的时候回调给Http模块的回调函数,光看名字就能知道每个case处理的是什么内容了吧?

收的问题系统API已经替我们做了,我们只需要对每一次事务做出处理就行了,那发的问题怎么解决呢?http库不会让你一个字一个字去拼http的header和内容的,调用相应的api即可,对Http头和内容的组织形式,相关参数的意义请自行去官网查阅。

累了,先写到这儿,明天继续~~

    
[2] Graphics-ColorFilter
    来源: 互联网  发布时间: 2014-02-18
Graphics-----ColorFilter

1.使用ColorFilter

MaskFilter是对一个Paint的alpha通道的转换,而ColorFilter则是对每一个RGB通道应用转换 。所有由ColorFilter所派生的类在执行它们的转换时,都会忽略alpha通道。

Android包含三个ColorFilter:

ColorMatrixColorFilter  可以指定一个4×5的ColorMatrix并将其应用到一个Paint中。ColorMatrixes通常在程序中用于对图像进行处理 ,而且由于它们支持使用矩阵相乘的方法来执行链接转换,所以它们很有用。

LightingColorFilter  乘以第一个颜色的RGB通道,然后加上第二个颜色。每一次转换的结果都限制在0到255之间。

PorterDuffColorFilter  可以使用数字图像合成的16条Porter-Duff 规则中的任意一条来向Paint应用一个指定的颜色。

使用setColorFilter方法应用ColorFilter,如下所示:

myPaint.setColorFilter(new LightingColorFilter(Color.BLUE, Color.RED)); 

API中的ColorMatrixSample是说明如何使用ColorFilter和Color Matrix的非常好的例子。

 

2.

private static void setContrast(ColorMatrix cm, float contrast) {
            float scale = contrast + 1.f;
               float translate = (-.5f * scale + .5f) * 255.f;
            cm.set(new float[] {
                   scale, 0, 0, 0, translate,
                   0, scale, 0, 0, translate,
                   0, 0, scale, 0, translate,
                   0, 0, 0, 1, 0 });
        }

 

    float contrast = mAngle / 180.f;
            
            setContrast(cm, contrast);
            paint.setColorFilter(new ColorMatrixColorFilter(cm));
            canvas.drawBitmap(mBitmap, x + mBitmap.getWidth() + 10, y, paint);
 



    
[3] Graphics-Shader
    来源: 互联网  发布时间: 2014-02-18
Graphics---Shader

Shader类的派生类可以创建允许使用多种固体颜色填充绘图对象的Paint。

对Shader最常见的使用是定义渐变填充;渐变是在2D图像中添加深度和纹理的最佳方式之一。Android包含了一个Bitmap Shader和一个Compose Shader,同时,还包含了三个渐变的Shader。

试图用语言来描述绘图的效果本来就是没有意义的,所以看一下图11-1就应该可以知道每一种Shader是如何工作的。图中从左到右依次代表的是LinearGradient、RadialGradient和 SweepGradient.

图11-1中没有包含的是ComposerShader,它可以创建多个Shader和BitmapShader的组合,从而可以在一个位图图像的基础上创建一个绘图刷。

要在绘图的时候使用一个Shader,可以使用setShader方法将其应用到一个Paint中,如下面的代码所示:

   1. Paint shaderPaint = new Paint();  
   2. shaderPaint.setShader(myLinearGradient); 

 

你使用这个Paint所绘制的任何东西都将使用你指定的Shader进行填充,而不是使用Paint本身的颜色进行填充。

定义渐变Shader

如上所示,使用渐变Shader可以让你使用交替改变的颜色来填充图片;你可以将颜色渐变定义为两种颜色的简单交替,如下所示:

   1. int colorFrom = Color.BLACK;  
   2. int colorTo = Color.WHITE;  
   3.  
   4. LinearGradient linearGradientShader = new LinearGradient(x1, y1, x2, y2,  
   5.                                                          colorFrom,  
   6.                                                          colorTo,  
   7.                                                          TileMode.CLAMP); 

 或者,你还可以定义更复杂的按照设定比例进行分布的颜色序列,如下面的RadialGradientShader例子所示:

   1. int[] gradientColors = new int[3];  
   2. gradientColors[0] = Color.GREEN;  
   3. gradientColors[1] = Color.YELLOW;  
   4. gradientColors[2] = Color.RED;  
   5.  
   6. float[] gradientPositions = new float[3];  
   7. gradientPositions[0] = 0.0f;  
   8. gradientPositions[1] = 0.5f;  
   9. gradientPositions[2] = 1.0f;  
  10.  
  11. RadialGradient radialGradientShader=new RadialGradient(centerX,centerY, radius,  
  12.                                                          gradientColors,  
  13.                                                          gradientPositions,  
  14.                                                          TileMode.CLAMP); 
 

每一种渐变Shader(线性的、辐射形的和扫描状的)都可以使用以上这两种技术来定义渐变填充。

使用Shader TileModes

渐变Shader的画刷大小既可以显式地使用有边界的矩形来定义,也可以使用中心点和半径长度来定义。Bitmap Shader可以通过它的位图大小来决定它的画刷大小。

如果Shader画刷所定义的区域比要填充的区域小,那么TileMode将会决定如何处理剩余的区域:

CLAMP  使用Shader的边界颜色来填充剩余的空间。

MIRROR  在水平和垂直方向上拉伸Shader图像,这样每一个图像就都能与上一个缝合了。

REPEAT  在水平和垂直方向上重复Shader图像,但不拉伸它。

 

在APIDemos 中Graphics下的RoundRects

 

static void setCornerRadii(GradientDrawable drawable, float r0,
                                   float r1, float r2, float r3) {
            drawable.setCornerRadii(new float[] { r0, r0, r1, r1,
                                                  r2, r2, r3, r3 });
        }


mDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR,
                                             new int[] { 0xFFFF0000, 0xFF00FF00,
                                                 0xFF0000FF });
            mDrawable.setShape(GradientDrawable.RECTANGLE);
            mDrawable.setGradientRadius((float)(Math.sqrt(2) * 60));


 mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);


 mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);


  mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);


  setCornerRadii(mDrawable, r, r, 0, 0);
  mDrawable.draw(canvas);

 

 

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
浙ICP备11055608号-3 iis7站长之家
▪根据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)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3