用sketch做android_android sketch - CSDN
  • SketchEditor 表示草图编辑器,允许用户在地图视图上以交互方式绘制几何图形。通过使用相应的SketchCreationMode启动SketchEditor,可以从头开始绘制不同的几何类型,例如点,多点,折线或多边形。...

    SketchEditor

    表示草图编辑器,允许用户在地图视图上以交互方式绘制几何图形。通过使用相应的SketchCreationMode启动SketchEditor,可以从头开始绘制不同的几何类型,例如点,多点,折线或多边形。

    构造方法

    public SketchEditor ()

    常用方法

    //如果草图有效,则获取当前几何
    public Geometry getGeometry ()
    
    //指示草图几何体是否有效
    public boolean isSketchValid ()
    
    //撤消草图几何体的最后一个动作
    public void undo ()
    
    //重做草图几何体的最后一个动作
    public void redo ()
    
    //如果草图会话已启动,则停止该草绘会话。getGeometry()在调用stop之前可以获得最终的草图几何。
    public void stop ()
    
    //为给定的草图创建模式启动新的编辑会话
    public void start (SketchCreationMode creationMode)
    
    //设置草图几何体的不透明度
    public void setOpacity (float opacity)
    

    看官网例子就能掌握SketchEditor的用法:

    /**
     * SketchEditor:表示草图编辑器,允许用户在地图视图上以交互方式绘制几何图形。
     */
    public class SketchEditorActivity extends AppCompatActivity {
    
        private final String TAG = MainActivity.class.getSimpleName();
    
        private SimpleMarkerSymbol mPointSymbol;
        private SimpleLineSymbol mLineSymbol;
        private SimpleFillSymbol mFillSymbol;
        private MapView mMapView;
        private SketchEditor mSketchEditor;
        private GraphicsOverlay mGraphicsOverlay;
    
        private ImageButton mPointButton;
        private ImageButton mMultiPointButton;
        private ImageButton mPolylineButton;
        private ImageButton mPolygonButton;
        private ImageButton mFreehandLineButton;
        private ImageButton mFreehandPolygonButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_sketch_editor);
    
            mMapView = findViewById(R.id.mapView);
            ArcGISMap map = new ArcGISMap(Basemap.Type.LIGHT_GRAY_CANVAS, 34.056295, -117.195800, 16);
            mMapView.setMap(map);
    
            mGraphicsOverlay = new GraphicsOverlay();
            mMapView.getGraphicsOverlays().add(mGraphicsOverlay);
    
            // 创建一个新的草图编辑器并将其添加到地图视图中
            mSketchEditor = new SketchEditor();
            mMapView.setSketchEditor(mSketchEditor);
    
            mPointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.SQUARE, 0xFFFF0000, 20);
            mLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, 0xFFFF8800, 4);
            mFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.CROSS, 0x40FFA9A9, mLineSymbol);
    
            initViews();
        }
    
        private void initViews() {
            // get buttons from layouts
            mPointButton = findViewById(R.id.pointButton);
            mMultiPointButton = findViewById(R.id.pointsButton);
            mPolylineButton = findViewById(R.id.polylineButton);
            mPolygonButton = findViewById(R.id.polygonButton);
            mFreehandLineButton = findViewById(R.id.freehandLineButton);
            mFreehandPolygonButton = findViewById(R.id.freehandPolygonButton);
    
            // add click listeners
            mPointButton.setOnClickListener(view -> createModePoint());
            mMultiPointButton.setOnClickListener(view -> createModeMultipoint());
            mPolylineButton.setOnClickListener(view -> createModePolyline());
            mPolygonButton.setOnClickListener(view -> createModePolygon());
            mFreehandLineButton.setOnClickListener(view -> createModeFreehandLine());
            mFreehandPolygonButton.setOnClickListener(view -> createModeFreehandPolygon());
        }
    
        /**
         * 单击point按钮时,重置其他按钮,显示选中的point按钮和开始点绘图模式。
         */
        private void createModePoint() {
            resetButtons();
            mPointButton.setSelected(true);
            mSketchEditor.start(SketchCreationMode.POINT);
        }
    
        /**
         * 单击multipoint按钮时,重置其他按钮,显示选中的multipoint按钮,然后开始多点绘图模式。
         */
        private void createModeMultipoint() {
            resetButtons();
            mMultiPointButton.setSelected(true);
            mSketchEditor.start(SketchCreationMode.MULTIPOINT);
        }
    
        /**
         * 单击折线按钮时,重置其他按钮,显示选中的折线按钮,然后开始折线图模式。
         */
        private void createModePolyline() {
            resetButtons();
            mPolylineButton.setSelected(true);
            mSketchEditor.start(SketchCreationMode.POLYLINE);
    
        }
    
        /**
         * 当单击多边形按钮时,重置其他按钮,显示选中的多边形按钮,并启动多边形绘图模式。
         */
        private void createModePolygon() {
            resetButtons();
            mPolygonButton.setSelected(true);
            mSketchEditor.start(SketchCreationMode.POLYGON);
        }
    
        /**
         * 单击FREEHAND_LINE按钮时,重置其他按钮,显示选定的FREEHAND_LINE按钮,和开始徒手画线模式。
         */
        private void createModeFreehandLine() {
            resetButtons();
            mFreehandLineButton.setSelected(true);
            mSketchEditor.start(SketchCreationMode.FREEHAND_LINE);
        }
    
        /**
         * 单击FREEHAND_POLYGON按钮时,重置其他按钮,显示选定的FREEHAND_POLYGON按钮,并启用徒手绘制多边形模式。
         */
        private void createModeFreehandPolygon() {
            resetButtons();
            mFreehandPolygonButton.setSelected(true);
            mSketchEditor.start(SketchCreationMode.FREEHAND_POLYGON);
        }
    
        /**
         * 当单击undo按钮时,撤消SketchEditor上的最后一个事件。
         */
        private void undo() {
            if (mSketchEditor.canUndo()) {
                mSketchEditor.undo();
            }
        }
    
        /**
         * 当单击redo按钮时,在SketchEditor上重做最后一个未完成的事件。
         */
        private void redo() {
            if (mSketchEditor.canRedo()) {
                mSketchEditor.redo();
            }
        }
    
        /**
         * 当单击停止按钮时,检查草图是否有效。如果是,从草图中得到几何图形,设置它将其添加到图形覆盖层。
         */
        private void stop() {
            if (!mSketchEditor.isSketchValid()) {
                reportNotValid(); //如果草图无效,则调用。向用户报告草图无效的原因。
                mSketchEditor.stop();
                resetButtons();
                return;
            }
    
            // 从草图编辑器获得几何图形
            Geometry sketchGeometry = mSketchEditor.getGeometry();
            mSketchEditor.stop();
            resetButtons();
    
            if (sketchGeometry != null) {
    
                //从草图编辑器创建一个图形
                Graphic graphic = new Graphic(sketchGeometry);
    
                // 根据几何类型分配符号
                if (graphic.getGeometry().getGeometryType() == GeometryType.POLYGON) {
                    graphic.setSymbol(mFillSymbol);
                } else if (graphic.getGeometry().getGeometryType() == GeometryType.POLYLINE) {
                    graphic.setSymbol(mLineSymbol);
                } else if (graphic.getGeometry().getGeometryType() == GeometryType.POINT ||
                        graphic.getGeometry().getGeometryType() == GeometryType.MULTIPOINT) {
                    graphic.setSymbol(mPointSymbol);
                }
    
                // 将图形添加到图形覆盖层
                mGraphicsOverlay.getGraphics().add(graphic);
            }
        }
    
        /**
         * 如果草图无效,则调用。向用户报告草图无效的原因。
         */
        private void reportNotValid() {
            String validIf;
            if (mSketchEditor.getSketchCreationMode() == SketchCreationMode.POINT) {
                validIf = "Point only valid if it contains an x & y coordinate.";
            } else if (mSketchEditor.getSketchCreationMode() == SketchCreationMode.MULTIPOINT) {
                validIf = "Multipoint only valid if it contains at least one vertex.";
            } else if (mSketchEditor.getSketchCreationMode() == SketchCreationMode.POLYLINE
                    || mSketchEditor.getSketchCreationMode() == SketchCreationMode.FREEHAND_LINE) {
                validIf = "Polyline only valid if it contains at least one part of 2 or more vertices.";
            } else if (mSketchEditor.getSketchCreationMode() == SketchCreationMode.POLYGON
                    || mSketchEditor.getSketchCreationMode() == SketchCreationMode.FREEHAND_POLYGON) {
                validIf = "Polygon only valid if it contains at least one part of 3 or more vertices which form a closed ring.";
            } else {
                validIf = "No sketch creation mode selected.";
            }
            String report = "Sketch geometry invalid:\n" + validIf;
            Snackbar reportSnackbar = Snackbar.make(findViewById(R.id.toolbarInclude), report, Snackbar.LENGTH_INDEFINITE);
            reportSnackbar.setAction("Dismiss", view -> reportSnackbar.dismiss());
            TextView snackbarTextView = reportSnackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
            snackbarTextView.setSingleLine(false);
            reportSnackbar.show();
            Log.e(TAG, report);
        }
    
        /**
         * De-selects all buttons.
         */
        private void resetButtons() {
            mPointButton.setSelected(false);
            mMultiPointButton.setSelected(false);
            mPolylineButton.setSelected(false);
            mPolygonButton.setSelected(false);
            mFreehandLineButton.setSelected(false);
            mFreehandPolygonButton.setSelected(false);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.undo_redo_stop_menu, menu);
            return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (id == R.id.undo) {
                undo();
            } else if (id == R.id.redo) {
                redo();
            } else if (id == R.id.stop) {
                stop();
            }
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        protected void onPause() {
            mMapView.pause();
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            mMapView.resume();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mMapView.dispose();
        }
    }
    
    展开全文
  • 你是否也曾被Android”惨不忍睹”的实现界面搞得焦头烂额,一度怀疑安卓开发小哥的能力是否不及格,几乎都快要对安卓无望了。从现在开始无须担心,这篇文章一定会让你对安卓重拾信心,配合开发做到安卓界面完美还原...

    你是否也曾被Android”惨不忍睹”的实现界面搞得焦头烂额,一度怀疑安卓开发小哥的能力是否不及格,几乎都快要对安卓无望了。从现在开始无须担心,这篇文章一定会让你对安卓重拾信心,配合开发做到安卓界面完美还原。(插件下载,见文章最底部。)

    一、起因

    每一次接过安卓测试机验收安卓的实现界面,都怀着无比忐忑的心情。不出意外每次都被“随性”的界面所折服,然后花上N次的加班时间来一点点的调整。在近期项目结束后打算找到每个“随性”界面的问题所在。终于在旁观了开发搭界面的过程中,发现了问题的关键:安卓文本框上下空白间隙

    经过测量发现,界面实现出来的文本框高度占比要比设计图中文字高度高出一大截。文本框在显示文字的基础上,上下留有相当距离的空白间隙。这个间隙就成了安卓界面还原问题的关键所在。

    通过互联网查找解决问题的答案,试图通过 去除开发时文本框控件上下间隙 的办法来解决这一问题。最终找到的办法有两种:

    方法一:自定义文本控件

    不使用系统默认文本框控件,自定义每个文本框的宽高。虽然自定义控件的办法可以消除控件中的上下间隙,但这个办法又产生了新问题,因为每一个文本框都需要单独写一层自定义宽高,这无疑是增加了一层布局深度,如果整个APP都使用这种方式来显示文本,会很大程度的影响产品的性能。所以这个方法不可取。

    方法二:增加一条去间隙的代码

    这是一个在很多论坛都提及过得的一条代码,作用是可以消除文本框的上下间隙:

    android:includeFontPadding="false"
    复制代码

    当加入这条代码之后,文本框高度虽然有所改变,但并不是完全消除,并且也无法保证消除后的高度与设计图中文本框高度一致。所以这个办法也没有完全的解决这一问题。

    当消除文本框间隙方法行不通时,那就只能换一种思考方式来解决问题。那就是增加设计图中的文本行高,使得设计和实现界面文本框所占高度保持一致。

    这种办法在互联网中有很多文章都曾提到,那就是在使用sketch进行界面设计时,文字的行高设置。但是大部分的文章都只提到一个大概的行高与字号比例,如1.2倍、1.4倍等。没有准确的对应数值和验证过程。

    但前段时间由@Gis1on和@Youngxkk 两人分享的《自动修复ios文字行高》的文章中 详细的列举了在iOS平台上,文本控件的高度与字号的对应关系,并找到其中规律,开发了sketch插件,自动修复设计图中不同字号的行高,使得修复后的行高与ios开发平台中的文本框高度一致。高效的解决了ios平台界面实现与设计图因文本所带来的差异。

    这篇文章对我有很大的启发。可惜的是,他们只解决了ios的问题,但实际工作中安卓界面的还原情况更令人担忧,只有解决了文本框间隙高度这一问题,才会有安卓完美还原设计的可能。

    幸运的是,团队新来了一位安卓开发工程师@zz379。和他简单的沟通后,他也意识到这个问题的关键性。我也感觉到了他追求完美还原的态度。和他探讨之后,我们决定在ios自动修复插件的基础上,通过实际的测量,制作一个针对安卓文字行高优化的插件,来高效的解决这一棘手的问题。

    二、测量

    先放测量结果,见下图:

    1.测量大小范围10-70,测量单位:PX

    为什么选择测量范围为10-70?

    常用安卓设计稿尺寸有两种一种是360640;另一种就是7201280。而在7201280的尺寸中常用到的文字的大小,包含了360640尺寸设计图中常用到的文字大小。

    移动设备中最小文字为20px,常用汉字文字在720尺寸设计图中也基本不会超过70px,所以我们选取了10px-70px的文字大小来进行测量,所以我们测量了10px-70px字号大小对应的textview的高度。

    为什么选择选择测量px而不是sp?

    测量px是因为px在设计图中是可获取的单位,如果选择测量sp,则在sketch中无法获得sp数值。

    2.不同机型和倍率测量

    开发使用安卓默认字体,但考虑到不同品牌机型运行字体不同,我们进行了4款机型的测量,分别是:三星s7(可换分辨率720x1280/1080x1920/1440x2560)、小米4(1080x1920)、华为mate9(1080x1920)坚果pro2(1080x1920)经过测量,同倍率下得到结果几乎一致。所以得到结论:行高测量结果不受品牌安卓机型默认字体影响

    随后又测量了不同倍率下的行高是否也遵循倍率变化。测量发现不论是2倍图、3倍图还是4倍图,通过倍率换算为像素值是几乎一样的。仅在33sp以上的部分4倍图中会出现2-3像素的减少。所以得到结论:在UI常用的文字大小范围内行高测量结果不受倍率影响。

    接着又进行了不同字重下行高的测量,结果是:行高不受字重影响

    在ios的插件中,测量的数值是有一定的规律的,他们运用了算法来计算字体大小所对应行高。但是安卓则不同,通过观察测量对比数据,没有发现可用规律,于是就把所有对应数值全部放入代码中,不同文字大小直接调用对应行高数值。

    三、插件使用注意事项

    注意一:

    因安卓开发时汉字默认字体为思源黑体,所以设计图字体最好为思源黑体,但sketch对于思源黑体的支持有bug,修改行高后,会出现错位,如图

    所以在设计图中不必再转换字体为思源黑体,直接使用苹方字体代替,因两款字体均为黑体,并且汉字高度字型接近,视觉效果不受影响。(注意:两款字体数字部分差异较大,思源黑体数字部分高于苹方字体的数字部分,开发中如遇到,请参照汉字调节数字位置)。

    注意二:

    插件使用后,因调整了行高,文字会发生轻微上下位移。建议先修复行高再调整文字距上下元素的间距。但在实际工作中,安卓设计图基本由ios设计图转换而来,文字都已输入完毕,那只能在修复行高之后,手动微调各文字上下间距,以保证各元素间距为偶数或设计规范中的间距数值。

    注意三:

    使用时,选中单个artboard或者多个文字图层,选择plugins => Auto Fix Android Text Line Height => Fix

    快捷键: shift + option + command + o

    (目前不支持同时选中多个artboard进行修复)

    注意四:

    插件不支持OSX系统,亲测mac系统 10.11.6版本以下不支持,10.11.6以上能否可用暂不明确。macOS High Sierra均可使用。(因android插件基于ios插件制作,所以这一问题也存在于ios插件)。

    四、修复效果对比

    通过上面的一系列对比图我们可以看到,修复前后的界面还原效果差距非常明显,插件修复后的行高在实际工作中可以完美匹配界面还原,并且字符框高度的问题是安卓界面完美还原最为棘手的问题。只有把这个问题解决了,才能有完美还原的可能。而解决这一问题的利器就是这款sketch修复行高插件。

    最后再次对@Gis1on和@Youngxkk 两位表达敬意,也感谢团队中的安卓开发@zz379,感谢他为测试界面实现、和插件代码的修改付出的努力。

    本文由York01 原创发布于公众号:约克想说,转载请注明出处。

    转载于:https://juejin.im/post/5b6264c85188251a8d370462

    展开全文
  • Android程序猿的Sketch学习之旅

    千次阅读 2017-01-06 09:23:43
    简书博客同步更新 传送门Sketch专为App绘图场景而生,也可以少量处理位图图片。通过下午3个小时的官方用户文档中文版的阅读和实践,我发现Sketch真得做到了“花最少的时间就能上手的绘图工具,让你专注于设计本身”...

    简书博客同步更新 传送门

    Sketch专为App绘图场景而生,也可以少量处理位图图片。通过下午3个小时的官方用户文档中文版的阅读和实践,我发现Sketch真得做到了“花最少的时间就能上手的绘图工具,让你专注于设计本身”

    熟练使用Sketch需要理解一些概念:

    1. 选区
    2. 图层
    3. 群组
    4. 切片: 画布中的特定区域导出为一个文件
    5. 符号(Symbol),类似于布局文件里的标签
    6. 蒙板,这个的作用类似安卓里的SetXfermode方法

    刚打开Sketch可以对每个菜单栏下的内容熟悉一遍,Sketch的界面可以分为四个部分

    1. 最左边的Page展示
    2. 顶部的工具栏
    3. 右边的检查器
    4. 中间的画板

    我的学习过程就是按着Sketch官方用户手册上的介绍实践了一遍,现在感觉已经能自己修改图标了(要有图片素材),剩下的就是对各种快捷键和绘图小技巧的熟练使用。

    注意事项:

    • 当你为 Mac 或网页设计时,你会想打开子像素抗锯齿效果,但是为 iOS 设计时,你会想关掉它。
    • 文字渲染遇到的问题是普通的屏幕里并没有足够多的像素来精确的展现文字的曲线。这就需要用到子像素抗锯齿技术了,它会将那些被文字曲线遮住一部分的像素稍稍变亮一些,并且在视觉上产生更平滑的效果。
    • 顺利实现子像素抗锯齿效果,文本必需出现在一个不透明的(有色的)背景上
    • 实现图层混合模式,Sketch 需要在一个透明背景上渲染所有的图层

    一次实践案例

    在App设计里,这张图标表示“我的”或“个人中心”,未选中时:

    未选中的我的图标

    未选中的数据列表图标

    当选中时,颜色由灰色变成红色,并且填充颜色头像,看起来有面的即视感:

    选中的我的图标

    选中的数据列表图标

    使用Sketch就能很高效的完成这样的改动,具体使用到的操作在官方用户手册的“图片”分类下和“导出”分类下说明得很到位,本文就不再赘叙了。

    小结

    这次跨界的感受是在安卓开发过程中,能做到对设计师给的切图心中有数,降低了彼此的沟通成本。加深一种解决问题的认识:实现某种UI显示效果,从代码环节转移到图片处理环节上

    参考资料:

    Sketch官方用户手册

    展开全文
  • Ant.Design.Pro.sketch

    2020-07-30 23:30:05
    移动开发必备 UI 设计套件。移动开发必备 UI 设计套件。
  • Sketch静态原型设计对于静态原型的设计,我们使用Sketch。启动Sketch后,我们将看到类似如下的界面,工具栏它的顶部是工具栏,可以通过菜单栏View -> Customize Toolbar...来自定义工具栏。 在弹出的窗口中,将下方...

    Sketch静态原型设计

    对于静态原型的设计,我们使用Sketch

    启动Sketch后,我们将看到类似如下的界面,

    sketch_ui_layout_empty

    工具栏

    它的顶部是工具栏

    sketch_ui_layout_toolbar

    可以通过菜单栏View -> Customize Toolbar...来自定义工具栏。
    在弹出的窗口中,将下方的图标拖拽到上方的工具栏中就可以了。

    sketch_customize_tool_bar

    导航栏

    左边是导航栏,用来展示这个项目拥有的pagepage中包含的详细内容。

    page是一张张单独页面,

    • 每个页面上可以放多个手机屏幕的画板:展开、折叠、图标等等;
    • 每个page中的画板都进一步的在导航栏的下半区域展示出来:展开、折叠、图标等等;
    • 多个page被归类到了pages的下面:Weather、 Symbols等等;

    我们设计的程序界面,就是某个page

    sketch_page_workspace

    工作区域

    工作区域显示的是page的详细内容。我们设计的程序界面具体样子,就是通过工作区域展现出来的。

    sketch_ui_layout

    属性设置区域

    属性设置区域用来设定某个选定图形的属性,例如它的大小、透明度、文字内容、字体颜色等等。

    sketch_layout_property_settings

    添加设备画板

    在新建的 Sketch项目中,双击导航栏page1,把页面的名字改成一个有意义的名字-Weathear

    sketch_page_rename

    通过工具栏Insert -> Artboard,调出画板,选择Material Design下的Mobile Portrait

    sketch_add_artboard

    通过右侧的属性设置区域,可以看到这个画板的大小为360px*640px,正好是一个mdpi的安卓设备屏幕尺寸。所以我们在这样的尺寸上做设计,能够很容易的顾及到其他像素密度的设备。

    可以看到Sketch为多种界面提供了默认的尺寸,iphone的,安卓设备的,网页的,MacOS应用的,可以说是应有尽有。这也说明Sketch就是为了这些产品而设计出来的。

    sketch_artboard

    除了使用菜单栏调出画板,你也可以使用快捷方式:A。这也是操作Sketch必须记住的快捷方式之一。


    本文是《从设计到实现-手把手教你做android应用开发》系列文档中的一篇。感谢您的阅读和反馈,对本文有任何的意见和建议请留言,我都会尽量一一回复。

    如果您觉得本文对你有帮助,请推荐给更多的朋友;或者加入我们的QQ群348702074和更多的小伙伴一起讨论;也希望大家能给我出出主意,让这些文档能讲的更好,能最大化的帮助到希望学习开发的伙伴们。

    除了CSDN发布的文章,本系列最新的文章将会首先发布到我的专属博客book.anddle.com。大家可以去那里先睹为快。


    同时也欢迎您光顾我们在淘宝的网店安豆的杂货铺。店中的积木可以搭配成智能LED灯,相关的配套文档也可以在这里看到。

    这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

    最后再次感谢各位读者对安豆的支持,谢谢:)

    展开全文
  • sketch 映客Android 设计

    2017-08-14 15:29:04
    于是自学了点 sketch 设计软件。学会了简单的切图,排版。苦于公司的设计都是同步ios,喜欢Android Material Design的设计风格,大腿一拍,说干就干,好赖凑出一幅设计图。主页(侧滑菜单 + 开播按钮)向上滚动隐藏...
  • Android-sketch.zip

    2020-07-30 23:33:17
    Android-sketch.zip,sketchandroid上一个强大而全面的图像加载器,支持gif、手势缩放、块显示超大图像。,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的...
  • 根据sketch效果图尺寸适配android手机

    千次阅读 2016-07-31 23:55:45
    一套效果图适配全尺寸和...这跟sketch设计稿和android适配有什么关系呢? 我们再来看一组我计算的数据:1280*720 除以 2 等于 640 * 360 1920*1080 除以 3 等于 640 * 360 854*480 除以 1.3333 等于 640 * 3
  • 圣餐仪式
  • sketch-app-asset-export, Sketch3插件,一个关键输出 Android/iOS/Mac/Windows 应用程序图标 #Sketch Plugin:App 资产导出Sketch插件,用于导出 android/ios应用程序图标的一个按键。为 Android/iOS/iPhone 应用...
  • 另一个Sketch Mirror Android App
  • Sketch近几年凭着大量的...为帮助初学者们早日踏入设计之门,在这篇文章中,摹客君将和大家分享前10个最好的Sketch UI界面设计套件,从Android/iOS UI 界面设计,到线框UI设计到网页设计,总有一款UI界面设计套件你...
  • 1.Android Studio的安装文件、SDK库文件的下载地址; 2.Android Studio的安装过程及注意事项; 3.Android Studio的环境配置:字体设置、主题设置、字体缩放处理、自动导库设置、编译选项设置、内存相关设置 4....
  • 列表加载gif图片,Fresco,Glide,android-gif-drawable等都能实现简单的单个Gif图片的加载,如果在列表上加载图片,不内存优化处理,那么OOM就会黏着你,对于项目比较紧急,时间有限的童鞋来说,优化无疑是...
  • 微软开源Sketch2Code 用户界面设计过程涉及大量创造性的迭代工作。这个过程通常从在白板或白纸上画草图开始,设计师和工程师分享他们的想法,尽力表达出潜在的客户场景或工作流程。当他们在某个设计上达成一致之后...
  • sketch-smooth-corner-android

    2019-02-22 09:54:21
    sketch-smooth-corner-android 项目地址:MartinRGB/sketch-smooth-corner-android  简介:A android project explained how to draw sketch smooth corner in android canvas 更多:作者 提 Bug  标签:  ...
  • https://www.jianshu.com/p/d9f14d933bf1
  • sketch-smooth-corner-android,一个android项目解释了如何在android画布上绘制草图平滑角.zip
  • 精彩绝伦的图片加载和缓存库
  • 迄今为止又一款 Android 第三方 Sketch Mirror 软件.zip,又一个Android的素描镜像应用程序。
1 2 3 4 5 ... 20
收藏数 2,651
精华内容 1,060
关键字:

用sketch做android