云炬Android开发笔记 17商品详情功能开发

阅读目录

1.商品详情ui框架设计

1.1 自定义圆形控件

1.2 底部栏的布局

1.3 整体布局

2.商品详情UI-MD风格伸缩渐变效果实现

2.1 ui的绑定

2.2 服务器中商品详情页的数据的取出

3.商品详情页的中间信息的完善

4. 商品详情页下部滑动Tab页面的实现

4.2 填充的ImageDelegate和布局

4.4 商品详情页的ViewPager的适配器的设置

5.商品飞入购物车和逻辑梳理

5.1 动画的依赖


1.商品详情ui框架设计
【说明】点击商品之后跳转到商品的详情页面

 

 1.1 自定义圆形控件
【源码】自定义圆形textView控件:com.flj.latte.ui.widget.CircleTextView1 package com.flj.latte.ui.widget;  2  3 import android.content.Context;  4 import android.graphics.Canvas;  5 import android.graphics.Color;  6 import android.graphics.Paint;  7 import android.graphics.PaintFlagsDrawFilter;  8 import android.support.annotation.ColorInt;  9 import android.support.v7.widget.AppCompatTextView; 10 import android.util.AttributeSet; 11 12 13 public class CircleTextView extends AppCompatTextView { 14 15 private final Paint PAINT; 16 private final PaintFlagsDrawFilter FILTER; 17 18 public CircleTextView(Context context) { 19 this(context, null); 20     } 21 22 public CircleTextView(Context context, AttributeSet attrs) { 23 super(context, attrs); 24         PAINT = new Paint(); 25         FILTER = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); 26         PAINT.setColor(Color.WHITE); 27         PAINT.setAntiAlias(true); 28     } 29 30 public final void setCircleBackground(@ColorInt int color) { 31         PAINT.setColor(color); 32     } 33 34     @Override 35 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 36 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 37 final int width = getMeasuredWidth(); 38 final int height = getMaxHeight(); 39 final int max = Math.max(width, height); 40         setMeasuredDimension(max, max); 41     } 42 43     @Override 44 public void draw(Canvas canvas) { 45         canvas.setDrawFilter(FILTER); 46         canvas.drawCircle(getWidth() / 2, getHeight() / 2, 47                 Math.max(getWidth(), getHeight()) / 2, PAINT); 48 super.draw(canvas); 49     } 50 }


回到顶部
1.2 底部栏的布局
【源码】\d1nj4n\latte-ec\src\main\res\layout\layout_goods_detail_bottom.xml

 

  1 <?xml version="1.0" encoding="utf-8"?>   2 <android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"   3     xmlns:tools="http://schemas.android.com/tools"   4     android:id="@+id/ll_bottom"   5     android:layout_width="match_parent"   6     android:layout_height="50dp"   7     android:layout_alignParentBottom="true"   8     android:baselineAligned="true"   9     android:orientation="horizontal">  10  11 <RelativeLayout  12 android:id="@+id/rl_favor"  13         android:layout_width="0dp"  14         android:layout_height="match_parent"  15         android:layout_weight="1"  16         android:background="@android:color/white"  17         android:paddingBottom="5dp">  18  19 <com.joanzapata.iconify.widget.IconTextView  20 android:id="@+id/icon_favor"  21             android:layout_width="match_parent"  22             android:layout_height="wrap_content"  23             android:layout_centerHorizontal="true"  24             android:layout_marginTop="10dp"  25             android:gravity="center"  26             android:text="{fa-heart-o}"  27             android:textSize="20sp" />  28  29 <android.support.v7.widget.AppCompatTextView  30 android:layout_width="match_parent"  31             android:layout_height="wrap_content"  32             android:layout_alignParentBottom="true"  33             android:layout_centerHorizontal="true"  34             android:gravity="center"  35             android:text="喜欢"  36             android:textSize="12sp" />  37  38 </RelativeLayout>  39  40 <RelativeLayout  41 android:id="@+id/rl_shop_cart"  42         android:layout_width="0dp"  43         android:layout_height="match_parent"  44         android:layout_weight="1"  45         android:background="@android:color/white"  46         android:paddingBottom="5dp">  47  48 <com.joanzapata.iconify.widget.IconTextView  49 android:id="@+id/icon_shop_cart"  50             android:layout_width="match_parent"  51             android:layout_height="wrap_content"  52             android:layout_centerHorizontal="true"  53             android:layout_marginTop="10dp"  54             android:gravity="center"  55             android:text="{fa-shopping-cart}"  56             android:textSize="20sp" />  57  58 <android.support.v7.widget.AppCompatTextView  59 android:layout_width="match_parent"  60             android:layout_height="wrap_content"  61             android:layout_alignParentBottom="true"  62             android:layout_centerHorizontal="true"  63             android:gravity="center"  64             android:text="购物车"  65             android:textSize="12sp" />  66  67 <com.flj.latte.ui.widget.CircleTextView  68 android:id="@+id/tv_shopping_cart_amount"  69             android:layout_width="20dp"  70             android:layout_height="20dp"  71             android:layout_alignEnd="@+id/icon_shop_cart"  72             android:layout_alignParentTop="true"  73             android:layout_alignRight="@+id/icon_shop_cart"  74             android:layout_marginRight="20dp"  75             android:layout_marginTop="2dp"  76             android:gravity="center"  77             android:textColor="@android:color/white"  78             android:textSize="12sp"  79             tools:ignore="RtlHardcoded" />  80  81 </RelativeLayout>  82  83 <RelativeLayout  84 android:id="@+id/rl_add_shop_cart"  85         android:layout_width="0dp"  86         android:layout_height="match_parent"  87         android:layout_weight="2"  88         android:background="@android:color/holo_orange_dark"  89         android:gravity="center_horizontal">  90  91 <android.support.v7.widget.AppCompatTextView  92 android:layout_width="match_parent"  93             android:layout_height="match_parent"  94             android:layout_centerInParent="true"  95             android:gravity="center"  96             android:text="加入购物车"  97             android:textColor="@android:color/white" />  98  99 </RelativeLayout> 100 </android.support.v7.widget.LinearLayoutCompat>


回到顶部
1.3 整体布局
【源码】d1nj4n\latte-ec\src\main\res\layout\delegate_goods_detail.xml

 1 <?xml version="1.0" encoding="utf-8"?>  2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  3     xmlns:app="http://schemas.android.com/apk/res-auto"  4     android:layout_width="match_parent"  5     android:layout_height="match_parent">  6  7 <android.support.design.widget.CoordinatorLayout  //内容部分整体使用该布局抱起来  8 android:layout_width="match_parent"  9         android:layout_height="match_parent"> 10 11 <android.support.design.widget.AppBarLayout  //商品详情:会随着整体滑动而滑动 12 android:id="@+id/app_bar_detail" 13             android:layout_width="match_parent" 14             android:layout_height="wrap_content"> 15 16 <android.support.design.widget.CollapsingToolbarLayout  //可伸缩的toolbar,需要配合84行的behavior;必须套在appBarLayout中; 17 android:id="@+id/collapsing_toolbar_detail" 18                 android:layout_width="match_parent" 19                 android:layout_height="wrap_content" 20                 app:layout_scrollFlags="scroll|exitUntilCollapsed" 21                 app:statusBarScrim="@android:color/transparent"> 22 23 <RelativeLayout 24 android:layout_width="match_parent" 25                     android:layout_height="wrap_content"> 26 27 <com.bigkoo.convenientbanner.ConvenientBanner 28 android:id="@+id/detail_banner" 29                         android:layout_width="match_parent" 30                         android:layout_height="260dp" /> 31 32 <android.support.v7.widget.ContentFrameLayout 33 android:id="@+id/frame_goods_info" 34                         android:layout_width="match_parent" 35                         android:layout_height="match_parent" 36                         android:layout_below="@+id/detail_banner" /> 37 </RelativeLayout> 38 39 <!--要放在下面  否则CollapsingToolbarLayout 和 CoordinatorLayout不能正确的处理上下滑动的事件 --> 40 <android.support.v7.widget.Toolbar 41 android:id="@+id/goods_detail_toolbar" 42                     android:layout_width="match_parent" 43                     android:layout_height="?android:attr/actionBarSize" 44                     app:layout_collapseMode="pin">  //此处的模式必须选择为:pin模式,否则无法上下折叠滑动 45 46 <RelativeLayout 47 android:layout_width="match_parent" 48                         android:layout_height="match_parent"> 49 50 <com.joanzapata.iconify.widget.IconTextView 51 android:id="@+id/icon_goods_back" 52                             android:layout_width="wrap_content" 53                             android:layout_height="match_parent" 54                             android:layout_marginLeft="12dp" 55                             android:gravity="center" 56                             android:text="{fa-chevron-left}" 57                             android:textColor="@android:color/black" 58                             android:textSize="26sp" /> 59 60 <android.support.v7.widget.AppCompatTextView 61 android:id="@+id/tv_detail_title_text" 62                             android:layout_width="wrap_content" 63                             android:layout_height="wrap_content" 64                             android:layout_centerInParent="true" 65                             android:text="商品详情" 66                             android:textColor="@android:color/black" 67                             android:textSize="20sp" /> 68 </RelativeLayout> 69 </android.support.v7.widget.Toolbar> 70 <!--如果将TabLayout写在这里,将透明--> 71 72 </android.support.design.widget.CollapsingToolbarLayout> 73 74 <android.support.design.widget.TabLayout 75 android:id="@+id/tab_layout" 76                 android:layout_width="match_parent" 77                 android:layout_height="?attr/actionBarSize" /> 78 </android.support.design.widget.AppBarLayout> 79 80 <android.support.v4.view.ViewPager 81 android:id="@+id/view_pager" 82             android:layout_width="match_parent" 83             android:layout_height="match_parent" 84             app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 85 86 87 </android.support.design.widget.CoordinatorLayout> 88 89 <include layout="@layout/layout_goods_detail_bottom" /> 90 91 </RelativeLayout>

 


回到顶部
2.商品详情UI-MD风格伸缩渐变效果实现
回到顶部
2.1 ui的绑定
【说明】首先取出控件;
【商品详情页面的设置和布局】


【点击响应】【点击index页面的商品的按钮图标的点击响应】商品的id进行了传递,此处id就是json字符串中的id值;

 


【详情页面的数据】

 


【完善商品详情页】绑定ui;

 


回到顶部
2.2 服务器中商品详情页的数据的取出
【数据的返回】初始化数据;此处具有goods_id的参数;


【banner数据的取出】

 

 

 

 

 

 


回到顶部
3.商品详情页的中间信息的完善
【说明】布局使用的是frameLayout,内部会塞一个fragment,即delegate;
【好处】可以降低耦合度,可以改变其中的内容;

 

 

 


【新建fragment】


【布局】

 

 1 <?xml version="1.0" encoding="utf-8"?>  2 <android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"  3     android:layout_width="match_parent"  4     android:layout_height="match_parent"  5     android:background="@android:color/white"  6     android:orientation="vertical">  7  8 <android.support.v7.widget.AppCompatTextView  9 android:id="@+id/tv_goods_info_title" 10         android:layout_width="match_parent" 11         android:layout_height="wrap_content" 12         android:layout_marginLeft="20dp" 13         android:layout_marginRight="20dp" 14         android:layout_marginTop="20dp" 15         android:textColor="@android:color/black" 16         android:textSize="18sp" /> 17 18 <android.support.v7.widget.AppCompatTextView 19 android:id="@+id/tv_goods_info_desc" 20         android:layout_width="match_parent" 21         android:layout_height="wrap_content" 22         android:layout_marginLeft="20dp" 23         android:layout_marginRight="20dp" 24         android:layout_marginTop="5dp" 25         android:textSize="16sp" /> 26 27 <android.support.v7.widget.LinearLayoutCompat 28 android:layout_width="match_parent" 29         android:layout_height="wrap_content" 30         android:orientation="horizontal"> 31 32 <android.support.v7.widget.AppCompatTextView 33 android:layout_width="wrap_content" 34             android:layout_height="wrap_content" 35             android:layout_marginLeft="20dp" 36             android:layout_marginTop="10dp" 37             android:text="¥" 38             android:textColor="@color/app_main" 39             android:textSize="20sp" /> 40 41 <android.support.v7.widget.AppCompatTextView 42 android:id="@+id/tv_goods_info_price" 43             android:layout_width="wrap_content" 44             android:layout_height="wrap_content" 45             android:layout_marginTop="10dp" 46             android:text="1299" 47             android:textColor="@color/app_main" 48             android:textSize="20sp" /> 49 </android.support.v7.widget.LinearLayoutCompat> 50 51 </android.support.v7.widget.LinearLayoutCompat>


【传递服务器中的data数据】

 

 


【取出数据值】

 


【设置数据值】

 

 

 

 


回到顶部
4. 商品详情页下部滑动Tab页面的实现

 

 


【需要将viewPager和TabLayout相应的adapter中将数据进行转化】达到映射数据和滑动变换的效果;

 


【传递数据】

 

 


【数据适配器--数据的取出】

 

 

 

 

 


回到顶部
4.2 填充的ImageDelegate和布局
【数据为空】当数据为空的时候,在页面中使用fragment进行填充,有利于解耦;

 

 

 


【使用recycleView布局处理下半部的数据】

 


【完善】


【正确的写法】上面的写法不正确;

 


【初始化images】fragment天生支持StringarrayList;此处没有进行转化,处理简单;

 

 


【recycleView中的item的布局】


【recycleView的数据适配器】


【使用ImageDelegate】

 

 

 


回到顶部
4.4 商品详情页的ViewPager的适配器的设置

 

 

 


回到顶部
5.商品飞入购物车和逻辑梳理
回到顶部
5.1 动画的依赖
【贝塞尔动画】使用别人的贝塞尔的动画库,经过了修改;

 


【源码】d1nj4n\latte-ui\src\main\java\com\flj\latte\ui\animation\BezierAnimation.java

  1 package com.flj.latte.ui.animation;   2   3 import android.app.Activity;   4 import android.content.Context;   5 import android.graphics.drawable.Drawable;   6 import android.view.View;   7 import android.view.ViewGroup;   8 import android.view.animation.AccelerateInterpolator;   9 import android.view.animation.Animation;  10 import android.view.animation.AnimationSet;  11 import android.view.animation.DecelerateInterpolator;  12 import android.view.animation.TranslateAnimation;  13 import android.widget.ImageView;  14 import android.widget.LinearLayout;  15  16 import com.flj.latte.ui.R;  17  18  19 public final class BezierUtil {  20  21 static void startAnimationForJd(final View v, int fromXDelta,  22 int fromYDelta, int fx, int fy, int mx, int my, int tx,  23 int ty, final AnimationListener listener) {  24 final AnimationSet set = new AnimationSet(false);  25 final TranslateAnimation translateAnimation1 = new TranslateAnimation(fromXDelta, mx - fx, fromYDelta, my - fy);  26         translateAnimation1.setInterpolator(new DecelerateInterpolator());  27         translateAnimation1.setRepeatCount(0);  28         translateAnimation1.setFillAfter(false);  29         set.addAnimation(translateAnimation1);  30  31 final TranslateAnimation translateAnimation2 = new TranslateAnimation(fromXDelta, tx - mx, fromYDelta, ty - my);  32         translateAnimation2.setInterpolator(new AccelerateInterpolator());  33         translateAnimation2.setRepeatCount(0);  34         translateAnimation2.setFillAfter(false);  35         set.addAnimation(translateAnimation2);  36         set.setDuration(700);  37         set.setFillAfter(false);  38         set.setAnimationListener(new Animation.AnimationListener() {  39             @Override  40 public void onAnimationStart(Animation animation) {  41                 v.setVisibility(View.VISIBLE);  42             }  43  44             @Override  45 public void onAnimationEnd(Animation animation) {  46                 v.setVisibility(View.GONE);  47 if (listener != null) {  48                     listener.onAnimationEnd();  49                 }  50             }  51  52             @Override  53 public void onAnimationRepeat(Animation animation) {  54  55             }  56         });  57  58         v.startAnimation(set);  59     }  60  61 static ViewGroup createAnimLayout(Activity activity) {  62 final ViewGroup rootView = (ViewGroup) activity.getWindow().getDecorView();  63 final LinearLayout animLayout = new LinearLayout(activity);  64 final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(  65                 ViewGroup.LayoutParams.MATCH_PARENT,  66                 ViewGroup.LayoutParams.MATCH_PARENT);  67         animLayout.setLayoutParams(lp);  68         animLayout.setId(Integer.MAX_VALUE - 1);  69         animLayout.setBackgroundResource(android.R.color.transparent);  70         rootView.addView(animLayout);  71 return animLayout;  72     }  73  74 static View addViewToAnimLayout(Context mContext, View view, int[] location, boolean wrap_content) {  75 if (view == null) return null;  76 int x = location[0];  77 int y = location[1];  78 final LinearLayout.LayoutParams params;  79 if (wrap_content) {  80             Drawable drawable = null;  81 if (view instanceof ImageView) {  82                 drawable = ((ImageView) view).getDrawable();  83             }  84 if (drawable == null) {  85                 params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);  86             } else {  87                 params = new LinearLayout.LayoutParams(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  88             }  89         } else {  90 final int wh = mContext.getResources().getDimensionPixelSize(R.dimen.db_goods_wh);  91             params = new LinearLayout.LayoutParams(wh, wh);  92         }  93         params.leftMargin = x;  94         params.topMargin = y;  95         view.setLayoutParams(params);  96 return view;  97     }  98  99 public interface AnimationListener { 100 /** 101          * 处理动画结束后的逻辑,不要涉及动画相关的View 102 */ 103 void onAnimationEnd(); 104     } 105 }

 

 

 


【添加购物车的点击事件】

 


【】图片的url需要创建出来,获取值;同样 ,count值也需要处理;

 

 


【添加动画】

 

 

 

 

 

 

 

 


【BUG】添加购物车之后没有效果

 

 

 

 


【增加服务器返回数据的判断】在真实的环境中返回的数据是很多的,不是简单的true;

 

 


【效果】在加入购物车之后返回了服务器设置的值;

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/66156.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么断行-让代码更易读

Python怎么断行 - 让代码更易读 大多数Python程序员都知道&#xff0c;代码可读性非常重要。好的代码应该易于阅读和理解&#xff0c;而不是让人困惑和痛苦。 然而&#xff0c;我们经常会发现一些Python代码在一行中拥挤着多个表达式、长变量名混杂其中&#xff0c;让人感到相…

如何利用citespace分析cnki里的文献——(1)导入数据

##&#xff08;一&#xff09;在cnki中导出数据 按照自己的需要进行检索&#xff0c;选择需要导出的文献题录&#xff08;最多一次可选择500个&#xff09;&#xff0c;导出格式选为“Refworks”&#xff0c;点击“导出”&#xff0c;导出题录的txt&#xff0c;注意&#xff1a…

研究方法|用CiteSpace进行科学文献可视化分析

研究方法|用CiteSpace进行科学文献可视化分析 CiteSpace是什么&#xff1f; 简单来说&#xff0c;它一款通过将国内外文献进行可视化分析来帮助你了解一门学科前世今生的软件。 面对成千上万篇的文献&#xff0c;怎样才能快速锁定自己最感兴趣的主题及科学文献&#xff0c;找…

❤️这两个文献神器绝了!一张图谱梳理文献脉络

文章目录 引言神器1&#xff1a;connected papers关联文献图谱过往工作衍生工作 神器2&#xff1a;semantic scholar文献检索被引情况Semantic Reader阅读器 小结 引言 每当我们接触一个新技术领域时&#xff0c;往往需要借助大量的文献调研&#xff0c;来梳理研究现状。 尤其…

论文写作——origin画图

一 origin的安装 详见下面网址&#xff0c;内涵下载路径和破解方法。 http://www.ddooo.com/softdown/51005.htm 1. 下载origin 网址&#xff1a;https://thepcgo.com/origin-pro-8-0-free-download/ 2.下载破解相关压缩包 链接&#xff1a;https://pan.baidu.com/s/1LwA…

Endnote参考文献分享与导入

Endnote参考文献分享与导入/转移 文章发给老师如何将参考文献一同发送 软件版本为X8 一、分享 首先找到Endnote library的位置&#xff0c;将两个文件【一个是后缀为enl的数据库文件和另一个是.data文件夹】一起复制到一个文件夹&#xff0c;压缩通过网盘、U盘等方式发送给接…

名帖376 祝允明 草书《滕王阁序并诗》

《中国书法名帖目录》 祝允明&#xff0c;号枝山&#xff0c;明长洲(今苏州)人。弘治五年(1492)举人&#xff0c;天资卓越&#xff0c;五岁能作径尺大字&#xff1a;九岁能诗&#xff0c;写文章有奇气&#xff0c;且才思敏捷&#xff0c;与唐寅、文徵明、徐祯卿号称“吴中四才…

名帖249 文徵明 行书《滕王阁序》

《中国书法名帖目录》 《滕王阁序》是王勃创作的一篇骈文&#xff0c;素有“千古第一骈文”之名&#xff0c;无论从内容上还是从形式上看&#xff0c;都代表了中国骈文的最高成就。 曾有人问如何写出《滕王阁序》这样的作品&#xff0c;殊不知《滕王阁序》这样的雄构不是写出…

《滕王阁序》

滕王阁序 唐 王勃 南昌故郡&#xff0c;洪都新府&#xff0c;星分翼轸&#xff0c;地接衡庐&#xff0c;襟三江而带五湖&#xff0c;控蛮荆而引瓯越。物华天宝&#xff0c;龙光射斗牛之墟&#xff1b;人杰地灵&#xff0c;徐孺下陈蕃之榻。雄州雾列&#xff0c;俊彩星驰&#x…

chatgpt赋能python:Python输出波形:让你的数据可视化更轻松

Python输出波形&#xff1a;让你的数据可视化更轻松 随着数据获取和处理的不断深入&#xff0c;数据可视化正在变得越来越重要。而Python是一种流行的、易学习的、高级编程语言&#xff0c;广泛用于数据科学、统计学、机器学习等领域。Python的可视化库也非常强大&#xff0c;…

chatgpt赋能python:Python词云包:让数据可视化更加生动形象

Python词云包&#xff1a;让数据可视化更加生动形象 在当前大数据时代下&#xff0c;如何让海量数据更加生动形象展示&#xff0c;成为了数据科学家们面临的一个重要问题。数据可视化是其中的一种解决方案&#xff0c;词云作为数据可视化的一种手段&#xff0c;是很受欢迎的。…

chatgpt赋能python:一、Python在数据可视化中的应用

一、Python在数据可视化中的应用 Python是一种功能强大的编程语言&#xff0c;早已成为数据科学家和分析师的首选语言。数据可视化对于从数据中汲取信息和传达想法来说至关重要。Python也是数据可视化的理想工具之一。Python提供了许多强大的库&#xff0c;其中包括了一些流行…

chatgpt赋能python:Python画图:实现数据可视化的利器

Python 画图&#xff1a;实现数据可视化的利器 Python 是一款广泛应用于科学计算、数据分析、人工智能等领域的编程语言。除了能够处理数据、运算数字外&#xff0c;Python 还拥有在数据可视化方面的先天优势。用 Python 来展示您的数据&#xff0c;不仅仅有助于更清晰地传达信…

chatgpt赋能python:用Python绘制波形图:一项方便易行的数据可视化技术

用Python绘制波形图&#xff1a;一项方便易行的数据可视化技术 Python 是一种高级多范式编程语言&#xff0c;它在科学、数据分析和机器学习领域中极受欢迎。因为 Python 的语法结构简单易懂&#xff0c;它被广泛应用于实现各种数据可视化技术。 在本文中&#xff0c;我们将探…

Mac下最好用的离线词典-欧陆词典破解版

英语不是很好的童鞋看英文文档是不是有点淡淡的忧伤&#xff1f;给大家推荐一款自用的离线词典&#xff0c;自带离线词库很大并且可随意扩展&#xff0c;支持鼠标划词取词。本人一直使用&#xff0c;感觉非常好使。如果大家有更好使的离线词典也可以在本章底部留言&#xff0c;…

沙拉查词——网页翻译神器,哪里不会点哪里

网页翻译神器——沙拉查词 安装使用在网页中使用在pdf中使用 安装 以Chrome浏览器为例&#xff0c;进入chrome网上应用店&#xff0c;搜索沙拉查词&#xff0c;进行安装。 安装好后会弹出设置界面&#xff0c;最重要的是设置翻译引擎(推荐谷歌和有道&#xff09;&#xff0c;其…

Lucene+分词器精确提取用户自定义关键词(Lucene版本3.6)

此篇博客的Lucene版本是3.6.0&#xff0c;若您的Lucene版本为5.X可以移步到此博文http://blog.csdn.net/echoyy/article/details/78468225 在分词的过程中&#xff0c;有时候需要只提取词典里自定义好的关键词&#xff0c;而传统的分词工具如(IKanalyzer)好像并不支持此功能 CS…

英语提升利器之沙拉查词,Anki

学好英语对程序员的重要性不言而喻。而对于已经工作的程序员来说,专门花时间去背英语单词显然性价比不高。在日常工作的场景中,大多数程序员只要能够熟练阅读英文官方文档和技术文章就足够了。在这篇文章中,我将为大家介绍两个提升英语阅读的利器—沙拉查词,Anki。 学习场…

14行代码教你制作自己的有道词典单词本(python)

本来一直在用金山词霸&#xff0c;但是发现自己制作出来的txt格式单词本导入金山词霸后汉语意思会自动给我更改&#xff0c;这让我很不爽(因为高频单词考点意思就那一两个&#xff0c;我不需要把所有单词意思都知道)&#xff0c;尝试各种方法&#xff0c;but…it didn’t work&…

推荐一款十分好用的本地查词软件——MDict

对于外语学习者来说词典是必不可少的&#xff0c;或许你用的是网页版的词典&#xff0c;但是在接触更好的词典之前你永远也想不到查词会如此便捷&#xff0c;单词会如此好查、好记。最近发现了一款免费的本地词典——MDict&#xff0c;使用后我觉得非常好用&#xff0c;适合各类…