零打碎敲学Android 一 —用什么来替代Graphics

本文介绍了Android中如何替代Graphics进行图形处理,重点讲解了Bitmap和Canvas的基本概念和使用方法。通过示例代码展示了如何在View中绘制图形,包括Bitmap的创建、操作以及Canvas的绘图API。同时,提供了横屏和纵屏的效果展示,以及源码下载链接,帮助开发者快速上手Android图形编程。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               


这几天开着代理研究android(主要是长期以来 developer.android.com 被墙撞……),总算初步掌握了android的图形处理方式,准备在Blog上写一些经验性的总结。


一、Android Virtual Device仿真界面对应快捷


模拟项  设备键     PC键Home    HOMEMenu    (left softkey)    F2 or Page-up buttonStar    (right softkey)    Shift-F2 or Page DownBack    ESCCall/dial button    F3Hangup/end call button    F4Search    F5Power button    F7Audio volume up button    KEYPAD_PLUS, Ctrl-5Audio volume down button    KEYPAD_MINUS, Ctrl-F6Camera button    Ctrl-KEYPAD_5, Ctrl-F3Switch to previous layout orientation (for example, portrait, landscape)    KEYPAD_7, F11Switch to next layout orientation (for example, portrait, landscape)    KEYPAD_9, F12Toggle cell networking on/off    F8Toggle code profiling    F9 (only with -trace startup option)Toggle fullscreen mode    Alt-EnterToggle trackball mode    F6Enter trackball mode temporarily (while key is pressed)    DeleteDPad left/up/right/down    KEYPAD_4/8/6/2DPad center click    KEYPAD_5Onion alpha increase/decrease    KEYPAD_MULTIPLY(*) / KEYPAD_DIVIDE(/)


二、要想在View中绘制图形,至少需要用到以下三者

1、Bitmap

Android中使用Bitmap承载图像资源,其默认支持4种图像格式(调用方式,Bitmap.Config.XXXX),分别为ALPHA8、RGB565、ARGB4444、ARGB8888,单就显示效果而言以ARGB8888效果最佳,ALPHA8效果最差,当然占用资源与之相反。

不过Bitmap本身的运算量非常小,其具体操作大量依赖于native,如下所示:

   private static native Bitmap nativeCreate(int[] colors, int offset,                                              int stride, int width, int height,                                            int nativeConfig, boolean mutable);    private static native Bitmap nativeCopy(int srcBitmap, int nativeConfig,                                            boolean isMutable);    private static native void nativeDestructor(int nativeBitmap);    private static native void nativeRecycle(int nativeBitmap);    private static native boolean nativeCompress(int nativeBitmap, int format,                                            int quality, OutputStream stream,                                            byte[] tempStorage);    private static native void nativeErase(int nativeBitmap, int color);    private static native int nativeWidth(int nativeBitmap);    private static native int nativeHeight(int nativeBitmap);    private static native int nativeRowBytes(int nativeBitmap);    private static native int nativeConfig(int nativeBitmap);    private static native boolean nativeHasAlpha(int nativeBitmap);       private static native int nativeGetPixel(int nativeBitmap, int x, int y);    private static native void nativeGetPixels(int nativeBitmap, int[] pixels,                                               int offset, int stride, int x,                                               int y, int width, int height);       private static native void nativeSetPixel(int nativeBitmap, int x, int y,                                              int color);    private static native void nativeSetPixels(int nativeBitmap, int[] colors,                                               int offset, int stride, int x,                                               int y, int width, int height);    private static native void nativeCopyPixelsToBuffer(int nativeBitmap,                                                        Buffer dst);    private static native void nativeCopyPixelsFromBuffer(int nb, Buffer src);    private static native Bitmap nativeCreateFromParcel(Parcel p);    // returns true on success    private static native boolean nativeWriteToParcel(int nativeBitmap,                                                      boolean isMutable,                                                      Parcel p);    // returns a new bitmap built from the native bitmap's alpha, and the paint    private static native Bitmap nativeExtractAlpha(int nativeBitmap,                                                    int nativePaint,                                                    int[] offsetXY);

2、Canvas

Android中使用Canvas对应标准Java应用中的Graphics,其具体操作与Graphics类似,但实际功能却较Graphics为少,需要同Paint配合使用。

与Bitmap近似,Canvas主要实现依赖于OpenGL ES,其本身的运算量非常之小,Canvas本地接口如下所示:


    private static native int initRaster(int nativeBitmapOrZero);    private static native int initGL();    private static native void native_setBitmap(int nativeCanvas, int bitmap);    private static native void nativeSetViewport(int nCanvas, int w, int h);    private static native int native_saveLayer(int nativeCanvas, RectF bounds,                                               int paint, int layerFlags);    private static native int native_saveLayer(int nativeCanvas, float l,                                               float t, float r, float b,                                               int paint, int layerFlags);    private static native int native_saveLayerAlpha(int nativeCanvas,                                                    RectF bounds, int alpha,                                                    int layerFlags);    private static native int native_saveLayerAlpha(int nativeCanvas, float l,                                                    float t, float r, float b,                                                    int alpha, int layerFlags);    private static native void native_concat(int nCanvas, int nMatrix);    private static native void native_setMatrix(int nCanvas, int nMatrix);    private static native boolean native_clipRect(int nCanvas,                                                  float left, float top,                                                  float right, float bottom,                                                  int regionOp);    private static native boolean native_clipPath(int nativeCanvas,                                                  int nativePath,                                                  int regionOp);    private static native boolean native_clipRegion(int nativeCanvas,                                                    int nativeRegion,                                                    int regionOp);    private static native void nativeSetDrawFilter(int nativeCanvas,                                                   int nativeFilter);    private static nati

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值