当前位置:  编程技术>移动开发
本页文章导读:
    ▪图片相交形式 setXfermode        图片相交模式 setXfermode网上的资料         图片倒影  原文地址http://onewayonelife.iteye.com/blog/1169176 MainActivity Java代码   package org.wp.activity;      import android.app.Activity;   import andr.........
    ▪ PCB设计中电子器件布局评估检查标准        PCB设计中元器件布局评估检查标准 元器件的布局是PCB设计中个一个环节和部分,对于优秀的PCB设计工程师来说,合理有效的元器件布局一般都有常用的检查评估方法来进行检测,以下我们就.........
    ▪ 寨子腾讯“爱消除”游戏7日教程-DAY7       山寨腾讯“爱消除”游戏7日教程--DAY7【课程内容】今天将完成记分系统的设计,并对开发“疯狂消除”游戏用到的技术做一个小结。 【源代码下载地址】http://download.csdn.net/detail/elong_2009/64681.........

[1]图片相交形式 setXfermode
    来源: 互联网  发布时间: 2014-02-18
图片相交模式 setXfermode

网上的资料         图片倒影  原文地址http://onewayonelife.iteye.com/blog/1169176

MainActivity

Java代码  
  • package org.wp.activity;  
  •   
  • import android.app.Activity;  
  • import android.graphics.Bitmap;  
  • import android.graphics.Canvas;  
  • import android.graphics.LinearGradient;  
  • import android.graphics.Matrix;  
  • import android.graphics.PorterDuffXfermode;  
  • import android.graphics.Bitmap.Config;  
  • import android.graphics.PorterDuff.Mode;  
  • import android.graphics.Shader.TileMode;  
  • import android.graphics.Paint;  
  • import android.graphics.drawable.BitmapDrawable;  
  • import android.os.Bundle;  
  • import android.widget.ImageView;  
  •   
  • /** 
  •  * ==========================================  
  •  * Matrix 
  •  * ==========================================  
  •  * The Matrix class holds a 3x3 matrix for transforming coordinates.  
  •  * Matrix does not have a constructor,  
  •  * so it must be explicitly initialized using either reset()  
  •  * - to construct an identity matrix,  
  •  * or one of the set..() functions  
  •  * (e.g. setTranslate, setRotate, etc.). 
  •  *  
  •  * Matrix 中文里叫矩阵,高等数学里有介绍 
  •  * 在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。 
  •  * Matrix的操作,总共分为translate(平移),rotate(旋转), 
  •  * scale(缩放)和skew(倾斜)四种, 
  •  * 每一种变换在Android的API里都提供了set, post和pre三种操作方式 
  •  * 除了translate,其他三种操作都可以指定中心点。  
  •  *  
  •  * ==========================================  
  •  * createBitmap 
  •  * ========================================== 
  •  * public static Bitmap createBitmap (Bitmap source, int x, int y,  
  •  *                  int width, int height, Matrix m, boolean filter)  
  •  * Since: API Level 1 Returns an immutable bitmap from subset of the  
  •  *        source bitmap, transformed by the optional matrix.  
  •  *        It is initialized with the same density as the original bitmap. 
  •  * Parameters 
  •  * source  The bitmap we are subsetting  
  •  * x  The x coordinate of the first pixel in source  
  •  * y  The y coordinate of the first pixel in source  
  •  * width  The number of pixels in each row  
  •  * height  The number of rows  
  •  * m  Optional matrix to be applied to the pixels  
  •  * filter  true if the source should be filtered.  
  •  *         Only applies if the matrix contains more than  
  •  *         just translation.  
  •  * Returns 
  •  * A bitmap that represents the specified subset of source 
  •  * Throws 
  •  * IllegalArgumentException   
  •  * if the x, y, width, height values are outside of the  
  •  * dimensions of the source bitmap.  
  •  *  
  •  * source 源 bitmap对象 
  •  * x 源坐标x位置 
  •  * y 源坐标y位置 
  •  * width 宽度 
  •  * height 高度 
  •  * m 接受的maxtrix对象,如果没有可以设置 为null 
  •  * filter 该参数仅对maxtrix包含了超过一个翻转才有效 
  •  *  
  •  * ========================================== 
  •  * LinearGradient 
  •  * ========================================== 
  •  * public LinearGradient (float x0, float y0, float x1, float y1, i 
  •  *              nt color0, int color1, Shader.TileMode tile)  
  •  * Since: API Level 1 Create a shader that draws a linear gradient along a line. 
  •  * Parameters 
  •  * x0  The x-coordinate for the start of the gradient line  
  •  * y0  The y-coordinate for the start of the gradient line  
  •  * x1  The x-coordinate for the end of the gradient line  
  •  * y1  The y-coordinate for the end of the gradient line  
  •  * color0  The color at the start of the gradient line.  
  •  * color1  The color at the end of the gradient line.  
  •  * tile  The Shader tiling mode   
  •  *  
  •  * 在android.graphics中我们可以找到有关Gradient字样的类, 
  •  * 比如LinearGradient 线性渐变、RadialGradient径向渐变  和 角度渐变SweepGradient 三种, 
  •  * 他们的基类为android.graphics.Shader。 
  •  *  
  •  * LinearGradient线性渐变 
  •  * 在android平台中提供了两种重载方式来实例化该类分别为, 
  •  * 他们的不同之处为参数中第一种方法可以用颜色数组,和位置来实现更细腻的过渡效果, 
  •  * 比如颜色采样int[] colors数组中存放20种颜色,则渐变将会逐一处理。 
  •  * 而第二种方法参数仅为起初颜色color0和最终颜色color1。 
  •  * LinearGradient(float x0, float y0, float x1, float y1,  
  •  *      int[] colors, float[] positions, Shader.TileMode tile)  
  •  * LinearGradient(float x0, float y0, float x1, float y1,  
  •  *      int color0, int color1, Shader.TileMode tile)  
  •  *  
  •  * 参数一为渐变起初点坐标x位置,参数二为y轴位置, 
  •  * 参数三和四分辨对应渐变终点,最后参数为平铺方式,这里设置为镜像 
  •  *  
  •  * 刚才已经讲到Gradient是基于Shader类, 
  •  * 所以我们通过Paint的setShader方法来设置这个渐变 
  •  * p.setShader(lg); 
  •  *  
  •  * ========================================== 
  •  * setXfermode 
  •  * ========================================== 
  •  * Xfermode 
  •  * 可以通过修改Paint的Xfermode来影响在 
  •  * Canvas已有的图像上面绘制新的颜色的方式 。 
  •  *  
  •  * 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 
  •  * 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint; 
  •  * 如果它是部分透明的,那么它将会被染上下面的颜色。 
  •  *  
  •  * 下面的Xfermode子类可以改变这种行为: 
  •  *  
  •  * AvoidXfermode  指定了一个颜色和容差, 
  •  *                    强制Paint避免在它上面绘图(或者只在它上面绘图)。 
  •  * PixelXorXfermode  当覆盖已有的颜色时,应用一个简单的像素XOR操作。 
  •  *  
  •  * PorterDuffXfermode  这是一个非常强大的转换模式,使用它, 
  •  *                     可以使用图像合成的16条Porter-Duff规则的任意 
  •  *                     一条来控制Paint如何与已有的Canvas图像进行交互。 
  •  *  
  •  * 16条Porter-Duff规则 
  •  * 1.PorterDuff.Mode.CLEAR 
  •  * 2.PorterDuff.Mode.SRC 
  •  * 3.PorterDuff.Mode.DST 
  •  * 4.PorterDuff.Mode.SRC_OVER 
  •  * 5.PorterDuff.Mode.DST_OVER 
  •  * 6.PorterDuff.Mode.SRC_IN 
  •  * 7.PorterDuff.Mode.DST_IN 
  •  * 8.PorterDuff.Mode.SRC_OUT 
  •  * 9.PorterDuff.Mode.DST_OUT 
  •  * 10.PorterDuff.Mode.SRC_ATOP 
  •  * 11.PorterDuff.Mode.DST_ATOP 
  •  * 12.PorterDuff.Mode.XOR 
  •  * 13.PorterDuff.Mode.DARKEN 
  •  * 14.PorterDuff.Mode.LIGHTEN 
  •  * 15.PorterDuff.Mode.MULTIPLY 
  •  * 16.PorterDuff.Mode.SCREEN  
  •  *  
  •  * @author wp 
  •  */  
  • public class MainActivity extends Activity {  
  •   
  •     @Override  
  •     public void onCreate(Bundle savedInstanceState) {  
  •         super.onCreate(savedInstanceState);  
  •         setContentView(R.layout.main);  
  •   
  •         ImageView myImageView = (ImageView) this.findViewById(R.id.myImageView);  
  •         Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(  
  •                 R.drawable.qianqian)).getBitmap();  
  •         myImageView.setImageBitmap(createReflectedImage(bitmap));  
  •     }  
  •   
  •     private Bitmap createReflectedImage(Bitmap originalBitmap) {  
  •         // 图片与倒影间隔距离  
  •         final int reflectionGap = 4;  
  •           
  •         // 图片的宽度  
  •         int width = originalBitmap.getWidth();  
  •         // 图片的高度  
  •         int height = originalBitmap.getHeight();  
  •           
  •         Matrix matrix = new Matrix();  
  •         // 图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转  
  •         matrix.preScale(1, -1);  
  •         // 创建反转后的图片Bitmap对象,图片高是原图的一半。  
  •         Bitmap reflectionBitmap = Bitmap.createBitmap(originalBitmap, 0,  
  •                 height / 2, width, height / 2, matrix, false);  
  •         // 创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。  
  •         Bitmap withReflectionBitmap = Bitmap.createBitmap(width, (height  
  •                 + height / 2 + reflectionGap), Config.ARGB_8888);  
  •   
  •         // 构造函数传入Bitmap对象,为了在图片上画图  
  •         Canvas canvas = new Canvas(withReflectionBitmap);  
  •         // 画原始图片  
  •         canvas.drawBitmap(originalBitmap, 0, 0, null);  
  •   
  •         // 画间隔矩形  
  •         Paint defaultPaint = new Paint();  
  •         canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);  
  •   
  •         // 画倒影图片  
  •         canvas.drawBitmap(reflectionBitmap, 0, height + reflectionGap, null);  
  •   
  •         // 实现倒影效果  
  •         Paint paint = new Paint();  
  •         LinearGradient shader = new LinearGradient(0, originalBitmap.getHeight(),   
  •                 0, withReflectionBitmap.getHeight(), 0x70ffffff, 0x00ffffff,  
  •                 TileMode.MIRROR);  
  •         paint.setShader(shader);  
  •         paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  
  •   
  •         // 覆盖效果  
  •         canvas.drawRect(0, height, width, withReflectionBitmap.getHeight(), paint);  
  •   
  •         return withReflectionBitmap;  
  •     }  

  • ================================================================================================================================


    原文地址http://lipeng88213.iteye.com/blog/1189452

    setXfermode 


    设置两张图片相交时的模式 

    我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint; 

    而setXfermode就可以来解决这个问题 


    一般来说 用法是这样的 

    Java代码  
  • Canvas canvas = new Canvas(bitmap1);  
  •   
  • paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  
  •   
  • canvas.drawBitmap(mask, 0f, 0f, paint);    

  • 就是在图片bitmap1上面绘制图片mask时 处理两者相交时候显示的问题 

    canvas原有的图片 可以理解为背景 就是dst 
    新画上去的图片 可以理解为前景 就是src 


    Mode的值 如下图 

     


    一个遮罩层的具体例子  原文http://lonesane.iteye.com/blog/791267

    由于中间黄色部分是进度条区域,带有一定的弧度而不是规则的长方形。刚开始想偷懒用了很多办法来实现效果都不理想。后来想到使用遮罩层可以非常方便的实现这个功能。

    可以通过修改Paint的Xfermode来实现遮罩的效果。Xfermode的功能非常强大,在API DEMO的Graphics中的最后一项有demo。看一下怎么实现我们的这个进度条吧。

     

     

    首先用图片处理软件制作一个和中间黄色区域相同的图形,我们将在代码中设置它做为遮罩。


    View的draw方法

     

    Java代码  
  • public void draw(Canvas canvas) {  
  •         //背景部分,也就是上面的图形  
  •         Bitmap background = BitmapFactory.decodeResource(getResources(),  
  •                 R.drawable.guage);  
  •         //遮罩,就是提取来部分  
  •         Bitmap mask = BitmapFactory.decodeResource(getResources(),  
  •                 R.drawable.mask);  
  •           
  •         canvas.drawColor(Color.WHITE);  
  •         canvas.drawBitmap(background, 0, 0, null);  
  •         Paint paint = new Paint();  
  •         paint.setFilterBitmap(false);  
  •   
  •         int x = 0;  
  •         int y = 0;  
  •   
  •         // draw the src/dst example into our offscreen bitmap  
  •         int sc = canvas.saveLayer(x, y, x + background.getWidth(), y + background.getHeight(), null,  
  •                 Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG  
  •                         | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG  
  •                         | Canvas.FULL_COLOR_LAYER_SAVE_FLAG  
  •                         | Canvas.CLIP_TO_LAYER_SAVE_FLAG);  
  •         // canvas.drawBitmap(mDstB, 0, 0, paint);  
  •         canvas.drawRect(0, 0, background.getWidth() / 2, background  
  •                 .getHeight(), paint);  
  •         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));  
  •         // canvas.drawBitmap(mSrcB, 0, 0, paint);  
  •         canvas.drawBitmap(mask, 0f, 0f, paint);  
  •         paint.setXfermode(null);  
  •         canvas.restoreToCount(sc);  
  •   
  •     }  
  •  

     

    只用控制绘制的矩形的长度就可以实现进度条的效果了。


                 

    我做的效果是这样的,图片弄成圆的,效果如下

    主要代码

    // 圆形头像
            cover_user_photo = (CircularImage) view
                    .findViewById(R.id.cover_user_photo);
            
            String iconpath = getActivity().getApplicationContext().getFilesDir().getAbsolutePath()+ "/";
            iconpath += YqApp.mUserSettings.getString(PreferenceKey.USER_PIC, "");
            File mfile = new File(iconpath);
            Bitmap bm = null;
            if (mfile.exists()) {// 若该文件存在
                bm = BitmapFactory.decodeFile(iconpath);
            }
            Drawable drawab = null;
            if (null != bm) {
                drawab = new BitmapDrawable(createFramedPhoto(
                        getActivity().getWindowManager().getDefaultDisplay().getWidth()/2,
                        getActivity().getWindowManager().getDefaultDisplay().getHeight()/2, bm, 400));
            }

            if (null != drawab)
                cover_user_photo.setBackgroundDrawable(drawab);
            else
                cover_user_photo.setImageResource(R.drawable.face);

     private Bitmap createFramedPhoto(int x, int y, Bitmap image, float outerRadiusRat) {  
                Drawable imageDrawable = new BitmapDrawable(image);  
                Bitmap output = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);  
                Canvas canvas = new Canvas(output);  
          
                RectF outerRect = new RectF(0, 0, x, y);  
          
                Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);  
                paint.setColor(Color.RED);  
                canvas.drawRoundRect(outerRect, outerRadiusRat, outerRadiusRat, paint);  
          
                paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  
                imageDrawable.setBounds(0, 0, x, y);  
                canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);  
                imageDrawable.draw(canvas);  
                canvas.restore();  
          
                return output;  
            } 



        
    [2] PCB设计中电子器件布局评估检查标准
        来源: 互联网  发布时间: 2014-02-18
    PCB设计中元器件布局评估检查标准

     元器件的布局是PCB设计中个一个环节和部分,对于优秀的PCB设计工程师来说,合理有效的元器件布局一般都有常用的检查评估方法来进行检测,以下我们就将提供PCB设计元器件布局中的一般要求和标准,供PCB设计工程师参考借鉴。
      1. 系统布局是否保证布线的合理或者最优,是否能保证布线的可靠进行,是否能保证电路工作的可靠性。在布局的时候需要对信号的走向以及电源和地线网络有整体的了解和规划。
      2. 印制板尺寸是否与加工图纸尺寸相符,能否符合PCB制造工艺要求、有无行为标记。这一点需要特别注意,不少PCB板的电路布局和布线都设计得很漂亮、合理,但是疏忽了定位接插件的精确定位,导致设计的电路无法和其他电路对接。
      3. 元件在二维、三维空间上有无冲突。注意器件的实际尺寸,特别是器件的高度。在焊接免布局的元器件,高度一般不能超过3mm。
      4. 元件布局是否疏密有序、排列整齐,是否全部布完。在元器件布局的时候,不仅要考虑信号的走向和信号的类型、需要注意或者保护的地方,同时也要考虑器件布局的整体密度,做到疏密均匀。
      5. 需经常更换的元件能否方便地更换,插件板插入设备是否方便。应保证经常更换的元器件的更换和接插的方便和可靠。
      6. 调整可调元件是否方便。
      7. 热敏元件与发热元件之间是否有适当的距离。
      8. 在需要散热的地方是否装有散热器或者风扇,空气流是否通畅。应注意元器件和电路板的散热。
      9. 信号走向是否顺畅且互连最短。
      10. 插头、插座等与机械设计是否矛盾。
      11. 线路的干扰问题是否有所考虑。
      12. 电路板的机械强度和性能是否有所考虑。
      13. 电路板布局的艺术性及其美观性。

     

    深圳宏力捷电子专业生产1-28层高精密度pcb线路板:双面板、精密多层板、超长板(最长可做1米)、厚铜板、高频板、铝基板、铜基板、阻抗板、盲埋板等,主要行业领域:电子通讯、数码、数控设备、通信设备、安防、车载、仪器、工控等高科技产品.。通过ISO-9001质量管理体系认证、UL认证,交货快捷,公司引进国外先进设备保证高品质的线路板是我们的优势,价格合理、服务至上。欢迎广大客户来电咨询或来访洽谈业务!

        了解本公司更多相关信息,请登陆宏力捷官方网站:http://www.greattong.com


        
    [3] 寨子腾讯“爱消除”游戏7日教程-DAY7
        来源: 互联网  发布时间: 2014-02-18
    山寨腾讯“爱消除”游戏7日教程--DAY7

    【课程内容】今天将完成记分系统的设计,并对开发“疯狂消除”游戏用到的技术做一个小结。

    【源代码下载地址】http://download.csdn.net/detail/elong_2009/6468177

     

    终于要结束了,已经连续7天了,虽然每一天我们花在代码上的时间其实并不多(我大部分的时间事实上花在了用文字将整个设计开发过程真实记录下来( ⊙ o ⊙ ))。如果您已经认认真真地按照我第一天说到的方法进行了事件,那您一定已经抓到了本次课程的本质。相信只要配合一个稍微厉害一点的美工,不用一个月时间,你也能开发出《植物大战僵尸》这样的游戏来。(说实在的,就是“疯狂消除”用到的这几张简单的图片,也耗费了我整个开发的近一半的时间,因此说,有个合格的美工,会事半功倍!)

    到目前为止,游戏的基本雏形已经完成了。加上今天的记分系统,可以说已经是一个完整的游戏,当然还有很多功能等待您继续完善。

     

    1、计分系统

    本来不打算设计计分系统的,因为这个着实没有什么技术含量。不过自己玩了几天自己设计的“疯狂消除”,没有计分系统确实很不过瘾,索性就简单的设计了一个,玩起来确实感觉爽了很多。也许这就是计分系统自身的魅力所在吧。

     

    在package elong.CrazyLink.Core中,创建了一个Score类来处理计分。

    在每次消除动作完成时,我们判断如果有消除发生,则会调用score对象进行计分,同时动画渲染一个tip。

    case DISAPPEAR_END:

    {

    int clearCnt = clearPic();

    score.award(clearCnt);

    if(score.getAward() > 0)

    {

    drawTip1.control.start(clearCnt);

    }

    clearInline();

    markFill();

    break;

    }

     

    另外,我们会在markInLine中根据本次操作是否实现了消除来决定分值计算是否翻倍。以增加游戏的趣味性。(这样设计,连续消除次数越多,得分就会越高)

     

    static void markInLine()

    {

    int markCount = 0;

    for(int i = 0; i < (int)CrazyLinkConstent.GRID_NUM; i++)

    {

    for(int j = 0; j < (int)CrazyLinkConstent.GRID_NUM; j++) 

    {

    if (isInLine(i, j))

    {

    mStatus[i][j] = 4;

    markCount++;

    }

    }

    }

    if (markCount > 0)

    {

    drawDisappear.control.start();

    score.increase(); //增加计分系数

    }

    else

    {

    score.reset(); //复位计分系数

    }

    }

     

    详细的计分代码请参考附件。

     

     

     

    2、相关的OpenGL ES技术小结

    2.1对纹理图片的要求:

    在OpenGL ES中进行纹理映射时对纹理图片的尺寸是有要求的,纹理图片的宽度和高度必须为2n (2的n次方),即32x32,256x512等。如果图片不满足这个要求,可能在一些设备上显示正常,而在一些设备上直接看到白屏。

     

    2.2所有的操作都基于三角形

    在OpenGL ES中,并没用提供绘制正方形的操作,绘制一个正方形,需要转换成绘制两个三角形。

     

    2.3背面裁剪

    打开背面裁剪功能后,视角在三角形的背面时不渲染此三角形(即无法看到此三角形),该功能可以提高渲染的效率。

    因此,我们需要保证在观察方向上渲染三角形,否则就有可能会看不到所绘制的图像。很多初学者经常会遇到这个问题,如果您绘制的三角形没有按预期出现,您可能需要检查是不是这个原因引起的。

    以下是确定一个三角形正反面的方法:通常情况下,当面对一个三角形时,如果顶点的顺序是逆时针的,则位于三角形的正面;反之就是反面。

     

    2.4正交投影

    本教程最后采用的是正交投影。所谓正交投影是平行投影的一种,观察者的视线是平行的,不会产生在真实世界中的远小近大地透视效果。

    设置正交投影的语句为gl.glOrthof(left,right,bottom,top,near,far)

    其中的left和right为视口左右侧对应的x坐标,bottom与top为视口上下侧对应的y坐标,near与far为可视空间区域最近端与最远端的z坐标。

     

    2.5字节序的问题

    不同平台其字节序有可能不同,如果数据单元不是字节的,就一定要经过ByteBuffer进行转换,转换的关键就是要通过ByteOrder设置为nativeOrder(),以适应对应平台的字节序,否则就有可能会出现问题。

    ByteBuffer cbb = ByteBuffer.allocateDirect(textureCoors.length*4);

    cbb.order(ByteOrder.nativeOrder());//设置本地字节顺序

     

    2.6透明的叠加效果

    要实现透明的叠加效果,关键的地方是在onSurfaceCreated 中加入以下几行代码:

                /*透明效果对素材图片也有要求,要求图片的背景是透明的*/

             gl.glEnable(GL10.GL_BLEND);  

             gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);  

             gl.glEnable(GL10.GL_ALPHA_TEST);

             gl.glAlphaFunc(GL10.GL_GREATER,0.1f);

     

    2.7堆栈技术

    在OpenGL ES中,调用glPushMatrix()和glPopMatrix()方法进行堆栈操作。

    glPushMatrix()表示复制一份当前矩阵,并把复制的矩阵添加到堆栈的顶部;glPopMatrix表示丢弃堆栈顶部的那个矩阵。

    可以这样理解:glPushMatrix()记录下当前坐标的位置,经过一系列的平移、旋转变换之后,调用glPopMatrix()回到原来的坐标位置。

     

    【后记】现在你知道山寨的力量了吧!我们用7天(10个小时,每天约一个小时)左右的时间,就掌握了山寨一款游戏的必备技术。呵呵,那么,反过来呢?如果您有一款好的作品,别人要山寨你,是不是也很容易?尤其是......

     

    由于时间的关系,本教程没有考虑对不同分辨率的屏幕进行适配(在480*800或480*854上应该可以正常运行)。而对不同屏幕进行适配,是一项精细的活。如果碰巧在您的机器上没有正常显示,那么你可以简单修改CrazyLinkConstent.UNIT_SIZE来与您的屏幕匹配。

    另外,我们抛砖引玉地介绍了几种渲染特效的设计方法,类似的,您还可以发挥您的才智,设计出更多更炫的特效来。如果你做了这方面的工作,希望你也能分享出来。

     

     


        
    最新技术文章:
    ▪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)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


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

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

    浙ICP备11055608号-3