一、代用茶和白茶的区别?
1、真茶茶条紧而重,色泽油腻,滋味顺滑;代茶条绿松,有草味或异味,色泽不协调。
2、样品在沸水中浸泡1~2次,打开叶底时过滤茶汤,观察其形态特征。如果是真茶,它的叶基是三角形的,嫩茎是圆柱形的,芽叶和嫩叶的背面有银白色的毛,每根毛的下部是弯曲的。如果叶对生或丛生在茎上,叶脉羽毛状,直向叶缘,叶背多毛或无毛,叶缘有锯齿或无锯齿,则为代用茶。
3、电镜观察,真茶叶中可见草酸钙星状晶体,叶肉细胞有较粗的星形或树突状叶细胞,除主脉上的毛外,叶背的毛多数基部较短,弯曲度大,弯曲角度45-90度。而代用茶叶海绵组织中不含草酸钙晶体,且叶片上的毛直立或无毛。
4、真正的茶含有2%-5%的咖啡因,10%-30%的茶多酚和1%-2%的茶氨酸。代用茶是指咖啡因含量低于2%或不符合咖啡因、茶多酚和茶氨酸要求的代用茶。
每到春节,探亲访友的人越来越多,不少人会选择买些茶放在家里招待客人。提醒大家购买时需要看清茶叶包装上的“QS”代码。如果产品编号为“1401”,则为真茶;如果产品编号为“1402”,则为代用茶。
二、中草药的传统和现代用途
中草药概述
中草药,又称中药材,是指用于预防、治疗疾病以及保健的药材资源。中草药源远流长,具有悠久的历史和丰富的传统,是中国医药宝库的重要组成部分。
中草药的分类
根据药材的部位、性味功效及采收加工方法等不同,中草药可分为黄连、柴胡、当归等几百种。
中草药的传统用途
数千年来,中草药一直在中医治疗上扮演着至关重要的角色。它们被应用于调理身体、治疗疾病以及增强免疫力等方面,深受人们喜爱。
中草药的现代用途
随着现代医学的发展,越来越多的研究证实了中草药在心血管疾病、癌症、糖尿病等疾病的治疗中发挥着重要作用。其天然、温和且少副作用的特点备受青睐。
中草药的文化价值
除了医疗价值外,中草药还承载着丰富的文化内涵。例如《神农本草经》等古籍对中草药的记载,展现了中华民族对中草药的深厚情感与智慧。
感谢您阅读本文,希望通过这篇文章能让您更加了解中草药的价值和作用。
三、如何设置和修改《我的世界》游戏的启动画面
背景介绍
《我的世界》是一款由瑞典公司Mojang Studios开发的沙盒游戏。该游戏具备开放性和创造性,允许玩家在虚拟世界中建造和探索。游戏的启动画面是游戏程序运行前显示的界面,也是玩家进入游戏前的第一个视觉印象。对于喜欢个性化的玩家来说,设置和修改游戏的启动画面是一种很有意义的操作。 本文将为您介绍如何设置和修改《我的世界》游戏的启动画面,希望能帮助到您。
方法一:使用默认启动画面
《我的世界》默认的启动画面是游戏标志性方块世界以及游戏名称。这个画面经典简洁,能够代表这款游戏的核心玩法和风格。如果您对默认画面比较满意,可以不做任何设置,直接使用默认启动画面即可。 在默认情况下,启动画面也会显示版本号和游戏公司的商标。您可以根据自己的喜好,进一步调整启动画面的显示内容。
方法二:使用自定义启动画面
如果您希望给《我的世界》游戏添加一些个性化的元素,可以考虑使用自定义启动画面。以下是您需要进行的步骤:
- 在计算机中创建一张您喜欢的图片,并将其保存为JPEG、PNG或BMP格式。
- 将该图片命名为"background",并将其复制到《我的世界》游戏所在的文件夹中。
- 打开游戏,在启动器中选择“启动器选项”。
- 在弹出的选项窗口中,找到“自定义启动画面”选项,将其打开。
- 重新启动游戏,您将看到自己的自定义启动画面。
方法三:使用第三方启动器
如果您想要更多的自定义选项和功能,可以考虑使用第三方启动器。这些启动器是由游戏社区开发的,并提供了更多的设置和个性化选项。下面是一些常用的第三方启动器:
- MultiMC
- FTB启动器
- Twitch
总结
通过本文介绍的方法,您可以轻松设置和修改《我的世界》游戏的启动画面。您可以选择使用默认画面,也可以添加自定义元素,还可以尝试使用第三方启动器进行更多的个性化设置。希望这些方法能为您带来更好的游戏体验。 再次感谢您阅读本文,希望本文能为您提供帮助。
四、原装硒鼓和代用硒鼓的区别?
答:原装硒鼓是指随生产厂家匹配来的,或者机器原生产厂家指定和授权的生产商;代用硒鼓是指除原装外,其它牌子的(一般有代用的或者品牌的)硒鼓;而重灌装的意思是指在原装鼓或者通用硒鼓粉用完之外加粉进去,或者回收的硒鼓换了某一零部件后重新包装的硒鼓。
五、代用茶和固体饮料的区别?
代用茶和固体饮料是两种不同类型的饮品,它们在形态、制作方法和口感上存在一些区别。
1. 代用茶:代用茶是一种以植物材料制作而成的饮品,通常用来代替茶叶或咖啡,满足对咖啡因或茶叶感的需求。代用茶的主要成分可以包括烘焙过的谷物、豆类、花草、水果、坚果、香料等。代用茶一般以粉状或颗粒状的形式存在,需要用热水冲泡或沏泡后饮用。代用茶的口感和味道会因不同的成分而有所差异,有些品种可能呈现出类似咖啡或茶叶的风味,但总体来说与传统的茶叶或咖啡仍然存在一定的差异。
2. 固体饮料:固体饮料是一种预先制成的固体形式的饮品,通常是粉末或颗粒状,并可溶解在液体中。它们通常是由多种成分混合制成,包括糖、食用酸、人工或天然风味、色素、膳食纤维、维生素等。固体饮料可以溶解在水或牛奶中,形成可口的饮品。它们的制作过程通常包括混合、干燥和包装等步骤。固体饮料的口感和味道因品牌和类型而异,可以具有多种不同的口味,如果味、奶味、巧克力味等。
总之,代用茶主要是用植物材料制成,以满足对茶叶或咖啡的代替需求,需要冲泡后饮用;而固体饮料是预先制成的固体形式饮品,需要溶解在液体中,口味多样。选择哪种饮品取决于个人偏好和需求。
六、android app启动动画是怎样制作的?
文章目录:
蓝月羽:Android知识点文章目录这篇我们来学习一下自定义View,实现一下有趣的动画效果,就是滚动视图,然后子视图按照设定的动画,进入屏幕。效果图:
演示效果https://www.zhihu.com/video/1506245364269678592一、代码传送门
scrollchildanim二、开始撸码
1、捋顺类的关系
ScrollChildMountAnimView :用于包裹普通子视图来完成动画的视图(偷梁换柱)
ScrollAnimChildContainerLayout :滚动动画子视图的容器
MountAnimScrollView :挂载动画的滚动视图
持有关系:
MountAnimScrollView -》ScrollAnimChildContainerLayout -》MountAnimScrollView
ScrollAnimMountCallback :滚动视图子视图动画挂载回调, 被 ScrollChildMountAnimView 实现
2、自定义属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 挂载动画属性-->
<declare-styleable name="ScrollChildMountAnimView_LayoutParams">
<!-- 透明度动画-->
<attr name="mount_anim_alpha" format="boolean" />
<!-- 缩放x动画-->
<attr name="mount_anim_scaleX" format="boolean" />
<!-- 缩放y动画-->
<attr name="mount_anim_scaleY" format="boolean" />
<!-- 背景颜色渐变动画开始值-->
<attr name="mount_anim_fromBgColor" format="color" />
<!-- 背景颜色渐变动画结束值-->
<attr name="mount_anim_toBgColor" format="color" />
<!-- 平移动画-->
<attr name="mount_anim_translation" />
</declare-styleable>
<!-- 属性 mount_anim_translation 的可选值-->
<attr name="mount_anim_translation">
<!-- 平移动画从头部进入-->
<flag name="fromTop" value="0x01" />
<!-- 平移动画从底部进入-->
<flag name="fromBottom" value="0x02" />
<!-- 平移动画从左边进入-->
<flag name="fromLeft" value="0x04" />
<!-- 平移动画从右边进入-->
<flag name="fromRight" value="0x08" />
</attr>
</resources>
3、ScrollAnimMountCallback 接口
public interface ScrollAnimMountCallback {
/**
* 子视图动画挂载(滑动的时候会触发该方法)
*
* @param ratio 动画的比例 (0~1)
*/
void onChildAnimMount(float ratio);
/**
* 子视图动画卸载(就是恢复视图原来的状态)
*/
void onChildAnimUnmount();
}
4、解析 ScrollChildMountAnimView
用于包裹普通子视图来完成动画的视图(偷梁换柱),实现了 ScrollAnimMountCallback
具体代码:ScrollChildMountAnimView.java
3.1)在 onSizeChanged 方法进行宽高变量的赋值和重置视图
/**
* 当视图的大小发生变化时,在布局期间调用。如果你刚刚被添加到视图层次结构中,你被调用时的旧值为0。
*
* @param w 当前的视图宽度
* @param h 当前视图的高度
* @param oldw 当前视图旧的宽度
* @param oldh 当前视图旧的高度
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
currentWidth = w;
currentHeight = h;
onChildAnimUnmount();
}
3.2)在 onChildAnimMount 方法,进行视图的相关动画属性设置
@Override
public void onChildAnimMount(float ratio) {
// 执行视图动画
// ratio:0~1
//控制自身的动画属性
if (isMountAnimAlpha) {
setAlpha(ratio);
}
if (isMountAnimScaleX) {
setScaleX(ratio);
}
if (isMountAnimScaleY) {
setScaleY(ratio);
}
//判断到底是哪一种值:fromTop,fromBottom,fromLeft,fromRight
if (isMountAnimFrom(TRANSLATION_FROM_BOTTOM)) {
setTranslationY(currentHeight * (1 - ratio)); // currentHeight ---> 0 代表原来的位置
}
if (isMountAnimFrom(TRANSLATION_FROM_TOP)) {
setTranslationY(-currentHeight * (1 - ratio)); // -currentHeight ---> 0 代表原来的位置
}
if (isMountAnimFrom(TRANSLATION_FROM_LEFT)) {
setTranslationX(currentWidth * (1 - ratio));// currentWidth ---> 0 代表原来的位置
}
if (isMountAnimFrom(TRANSLATION_FROM_RIGHT)) {
setTranslationX(-currentWidth * (1 - ratio));// -currentWidth ---> 0 代表原来的位置
}
// 颜色渐变动画
if (mountAnimFromBgColor != -1 && mountAnimToBgColor != -1) {
//ratio=0.5 color=中间颜色
setBackgroundColor((Integer) argbEvaluator.evaluate(ratio, mountAnimFromBgColor, mountAnimToBgColor));
}
}
5、解析 ScrollAnimChildContainerLayout
滚动动画子视图的容器,这里会为布局中的普通子视图,包裹上 ScrollChildMountAnimView ,起到偷梁换柱的效果,进而实现动画
具体代码:ScrollAnimChildContainerLayout.java
4.1)定义 ScrollAnimLayoutParams ,读取自定义属性
public static class ScrollAnimLayoutParams extends LinearLayoutCompat.LayoutParams {
public int mountAnimFromBgColor;//背景颜色变化开始值
public int mountAnimToBgColor;//背景颜色变化结束值
public boolean isMountAnimAlpha;//是否需要透明度动画
public int mountAnimTranslation;//平移值
public boolean isMountAnimScaleX;//是否需要x轴方向缩放
public boolean isMountAnimScaleY;//是否需要y轴方向缩放
public ScrollAnimLayoutParams(Context context, AttributeSet attrs) {
super(context, attrs);
// 从child里面拿到我自定义的属性
@SuppressLint("CustomViewStyleable")
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ScrollChildMountAnimView_LayoutParams);
mountAnimFromBgColor = typedArray.getInt(R.styleable.ScrollChildMountAnimView_LayoutParams_mount_anim_fromBgColor, -1);
mountAnimToBgColor = typedArray.getInt(R.styleable.ScrollChildMountAnimView_LayoutParams_mount_anim_toBgColor, -1);
isMountAnimAlpha = typedArray.getBoolean(R.styleable.ScrollChildMountAnimView_LayoutParams_mount_anim_alpha, false);
mountAnimTranslation = typedArray.getInt(R.styleable.ScrollChildMountAnimView_LayoutParams_mount_anim_translation, -1);
isMountAnimScaleX = typedArray.getBoolean(R.styleable.ScrollChildMountAnimView_LayoutParams_mount_anim_scaleX, false);
isMountAnimScaleY = typedArray.getBoolean(R.styleable.ScrollChildMountAnimView_LayoutParams_mount_anim_scaleY, false);
typedArray.recycle();
}
/**
* 释放需要挂载动画
*
* @return true: 需要 false:不需要
*/
public boolean isNeedMountAnim() {
return isMountAnimAlpha ||
isMountAnimScaleX ||
isMountAnimScaleY ||
mountAnimTranslation != -1 ||
(mountAnimFromBgColor != -1 && mountAnimToBgColor != -1);
}
}
4.2)重载 generateLayoutParams 方法
当前方法会在 LayoutInflater.from(getContext()).inflate 中被调
/**
* 参考:https://blog.csdn.net/wjr1949/article/details/105607740
* 当前方法会被 LayoutInflater.from(getContext()).inflate 中 的 tryInflatePrecompiled 进行调用
*
* @param attrs 属性集合
*/
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new ScrollAnimLayoutParams(getContext(), attrs);
}
4.3)重载 addView 方法,进行偷梁换柱
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
if (params instanceof ScrollAnimLayoutParams) {
ScrollAnimLayoutParams layoutParams = (ScrollAnimLayoutParams) params;
if (layoutParams.isNeedMountAnim()) {
ScrollChildMountAnimView newChild = generateAnimView(layoutParams);
// 将原本的视图包进需要执行动画的视图
newChild.addView(child);
super.addView(newChild, index, params);
} else {
// 不需要挂载动画
super.addView(child, index, params);
}
} else {
super.addView(child, index, params);
}
}
/**
* 生成动画视图
*
* @param params 视图的 LayoutParams
*/
private ScrollChildMountAnimView generateAnimView(ScrollAnimLayoutParams params) {
ScrollChildMountAnimView view = new ScrollChildMountAnimView(getContext());
view.setMountAnimFromBgColor(params.mountAnimFromBgColor);
view.setMountAnimToBgColor(params.mountAnimToBgColor);
view.setMountAnimScaleX(params.isMountAnimScaleX);
view.setMountAnimScaleY(params.isMountAnimScaleY);
view.setMountAnimAlpha(params.isMountAnimAlpha);
view.setMountAnimTranslation(params.mountAnimTranslation);
return view;
}
6、解析 MountAnimScrollView
挂载动画的滚动视图,这里是真正做动画驱动的类
5.1)重载 onFinishInflate 方法,获取 ScrollAnimChildContainerLayout,当前方法也是在 LayoutInflater.from(getContext()) 中被调用的
// 在 LayoutInflater.from(getContext()) 中被调
@Override
protected void onFinishInflate() {
super.onFinishInflate();
containerLayout = (ScrollAnimChildContainerLayout) getChildAt(0);
}
5.2)重载 onSizeChanged 方法,将第一个视图设置为全屏
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// 将第一个视图的高度设置为 ScrollView 的高度
View firstChild = containerLayout.getChildAt(0);
firstChild.getLayoutParams().height = getHeight();
}
5.3)重载 onScrollChanged 方法,去调用 ScrollAnimMountCallback 的 onChildAnimMount 和 onChildAnimUnmount 方法,从而实现动画加载和恢复
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
// 滚动监听
int scrollViewHeight = getHeight();
int childCount = containerLayout.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = containerLayout.getChildAt(i);
if (child instanceof ScrollAnimMountCallback) {
dispatchAnim(child, scrollViewHeight, t);
}
}
}
/**
* 分发动画
*
* @param child 子视图
* @param scrollViewHeight ScrollView 的高度
* @param t 当前垂直滚动原点
*/
private void dispatchAnim(View child, int scrollViewHeight, int t) {
ScrollAnimMountCallback scrollAnimMountCallback = (ScrollAnimMountCallback) child;
//1.child离scrollview顶部的高度 a
int distanceTop = child.getTop();
int distanceHeight = child.getHeight();
//2.得到scrollview滑出去的高度 b 就是int t,
//3.得到child离屏幕顶部的高度 c
int distanceAbsoluteTop = distanceTop - t;
//什么时候执行动画?当child滑进屏幕的时候
if (distanceAbsoluteTop <= scrollViewHeight) {
int visibleGap = scrollViewHeight - distanceAbsoluteTop;
//确保ratio是在0~1,超过了1 也设置为1
scrollAnimMountCallback.onChildAnimMount(clamp(visibleGap / (float) distanceHeight, 1f, 0f));
} else {//否则,就恢复到原来的位置
scrollAnimMountCallback.onChildAnimUnmount();
}
}
三、调用
具体查看:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<com.young.scrollchildanim.MountAnimScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:mountAnim="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.young.scrollchildanim.ScrollAnimChildContainerLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="600dp"
android:background="@android:color/white"
android:fontFamily="serif"
android:gravity="center"
android:padding="25dp"
android:text="公司面临着一项重大抉择,现在将进行一次我们的世纪大会,董事长已经各位股东各就各位。"
android:textColor="@android:color/black"
android:textSize="25sp"
tools:visibility="gone" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/meeting"
mountAnim:mount_anim_alpha="true"
android:background="#FF0000"/>
<View
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#007788"
mountAnim:mount_anim_alpha="true" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="200dp"
android:layout_height="220dp"
android:src="@drawable/boss"
mountAnim:mount_anim_alpha="true"
mountAnim:mount_anim_translation="fromLeft|fromBottom" />
<View
android:layout_width="match_parent"
android:layout_height="200dp"
mountAnim:mount_anim_fromBgColor="#ffff00"
mountAnim:mount_anim_toBgColor="#88EE66" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="220dp"
android:layout_height="310dp"
android:layout_gravity="right"
android:src="@drawable/boss"
mountAnim:mount_anim_translation="fromRight" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="serif"
android:gravity="center"
android:padding="20dp"
android:text="辛苦遭逢起一经,干戈寥落四周星。
山河破碎风飘絮,身世浮沉雨打萍。
惶恐滩头说惶恐,零丁洋里叹零丁。
人生自古谁无死,留取丹心照汗青。"
android:textSize="23sp"
mountAnim:mount_anim_alpha="true"
mountAnim:mount_anim_translation="fromBottom" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_margin="20dp"
android:src="@drawable/applause"
mountAnim:mount_anim_scaleX="true"
mountAnim:mount_anim_scaleY="true" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="20dp"
android:src="@drawable/xiemu"
mountAnim:mount_anim_translation="fromLeft|fromBottom" />
</com.young.scrollchildanim.ScrollAnimChildContainerLayout>
</com.young.scrollchildanim.MountAnimScrollView>
七、cta动画和an动画的区别?
CTA动画和AN动画都是动画制作的方式和风格,具有不同的特点和应用场景,主要的区别如下:
制作方式:CTA动画是一种基于传统的手绘动画制作方式,通过手工绘制和涂色的方式制作出动画效果。AN动画则是一种基于计算机技术的动画制作方式,使用专业的动画制作软件和工具进行制作。
风格特点:CTA动画的风格通常较为夸张、幽默、可爱,色彩鲜明、生动活泼,适合用于儿童动画和卡通动画等。AN动画则通常具有更真实、更复杂的画面效果和动作表现,适合用于电影、电视剧和游戏等高端动画制作。
应用场景:由于CTA动画制作方式相对简单,成本较低,因此适合用于电视广告、网络视频、APP等短时动画和广告制作。AN动画则通常用于长篇动画、电影和电视剧等高端动画制作。
总的来说,CTA动画和AN动画都有各自的优势和应用场景,选择使用哪种方式制作动画,应根据具体的需求和制作目的而定。
八、电源板代用和原装的区别?
电源板代用的质量要低于原装的,电源板是一个设备的关键部件,电源板质量的好坏对于设备主板的运行和设备元器件儿的寿命有直接关系,而原装电源板它的额定功率能够得到保证,质量也比较高,待用电源板一般实际功率都要小于它的额定功率
九、电视代用板和原装板的区别?
你好,电视代用板和原装板的区别在于它们的品质和性能。原装板是电视制造商提供的原始电路板,经过严格的测试和质量控制,保证电视的性能和稳定性。
而代用板是由第三方制造商生产的替代品,其品质和性能可能不如原装板,可能会对电视的性能产生影响,例如图像质量、音效等。
此外,使用代用板可能会影响电视的质保和维修,因为制造商可能不会为代用板提供支持和服务。因此,建议使用原装板进行维修或更换。
十、手环带代用款和原装的区别?
手环带代用款和原装还是有很大区别的,主要看你手环的品牌。有的品牌供应商原装带会比较贵,性价比较低。
代用款有好有坏,质量参差不齐,主要看你怎么选。代用款的质量,材料等会有很多选择,有的比较亲肤的材质可能会比较贵。
如果你对手环带的要求不高,可以在第三方平台比如某宝,某京上去买,输入手环的品牌和型号,选择便宜一点的,一般都适用。
如果你对手环带的要求比较高的话,可以选择价格贵一点的,50元以上的,亲肤材质的,就比较好。
最后,选择手环带最好选择好扣,不容易掉的手环带。