ios cell滑动删除出现删除是谁发明的

Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
今天还是给大家带来自定义控件的编写,自定义一个ListView的左右滑动删除Item的效果,这个效果之前已经实现过了,有兴趣的可以看下Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果,之前使用的是滑动类Scroller来实现的,但是看了下通知栏的左右滑动删除效果,确实很棒,当我们滑动Item超过一半的时候,item的透明度就变成了0,我们就知道抬起手指的时候item就被删除了,当item的透明度不为0的时候,我们抬起手指Item会回到起始位置,这样我们就知道拖动到什么位置item会删除,什么位置Item不删除,用户体验更好了,还有一个效果,就是我们滑动删除了item的时候,ListView的其他item会出现向上或者向下滚动的效果,感觉效果很棒,所以在GitHub上面搜索了下,发现很多开源库都有这个效果,比如ListViewAnimations, android-swipelistview等等,我看了下实现原理,使用的是Jake Wharton的动画开源库NineOldAndroids,这个库究竟是干嘛的呢?在API3.0(Honeycomb), SDK新增了一个android.animation包,里面的类是实现动画效果相关的类,通过Honeycomb API,能够实现非常复杂的动画效果,但是如果开发者想在3.0以下使用这一套API, 则需要使用开源框架Nine Old Androids,在这个库中会根据我们运行的机器判断其SDK版本,如果是API3.0以上则使用Android自带的动画类,否则就使用Nine Old Androids库中,这是一个兼容库,接下来我们就来看看这个效果的具体实现吧
实现该效果的主要思路
先根据手指触摸的点来获取点击的是ListView的哪一个Item当手指在屏幕上面滑动的时候,我们要使得Item跟随手指的滑动而滑动当我们抬起手指的时候,我们根据滑动的距离或者手指在屏幕上面的速度来判断Item是滑出屏幕还是滑动至其实位置Item滑出屏幕时,使ListView的其他item产生向上挤压或者向下挤压的效果
大致的思路这是这四步,其中的一些细节接下来我会一一为大家解答的,接下来我们就用代码来实现这种效果吧
首先我们新建一个工程,叫Swipedismisslistview,我们需要将Nine Old Androids这个库引入到工程,大家可以去/JakeWharton/NineOldAndroids,可以使用Jar包,也可以使用工程库的形式引入到我们自己的工程,我们还需要自定义一个ListView,我们先看代码然后给大家讲解下具体的功能实现
package com.example.
import static com.nineoldandroids.view.ViewHelper.setA
import static com.nineoldandroids.view.ViewHelper.setTranslationX;
import android.content.C
import android.util.AttributeS
import android.view.MotionE
import android.view.VelocityT
import android.view.V
import android.view.ViewC
import android.view.ViewG
import android.widget.AdapterV
import android.widget.ListV
import com.nineoldandroids.animation.A
import com.nineoldandroids.animation.AnimatorListenerA
import com.nineoldandroids.animation.ValueA
import com.nineoldandroids.view.ViewH
import com.nineoldandroids.view.ViewPropertyA
* @blog http://blog.csdn.net/xiaanming
* @author xiaanming
public class SwipeDismissListView extends ListView {
* 认为是用户滑动的最小距离
private int mS
* 滑动的最小速度
private int mMinFlingV
* 滑动的最大速度
private int mMaxFlingV
* 执行动画的时间
protected long mAnimationTime = 150;
* 用来标记用户是否正在滑动中
private boolean mS
* 滑动速度检测类
private VelocityTracker mVelocityT
* 手指按下的position
private int mDownP
* 按下的item对应的View
private View mDownV
private float mDownX;
private float mDownY;
* item的宽度
private int mViewW
* 当ListView的Item滑出界面回调的接口
private OnDismissCallback onDismissC
* 设置动画时间
* @param mAnimationTime
public void setmAnimationTime(long mAnimationTime) {
this.mAnimationTime = mAnimationT
* 设置删除回调接口
* @param onDismissCallback
public void setOnDismissCallback(OnDismissCallback onDismissCallback) {
this.onDismissCallback = onDismissC
public SwipeDismissListView(Context context) {
this(context, null);
public SwipeDismissListView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
public SwipeDismissListView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
ViewConfiguration vc = ViewConfiguration.get(context);
mSlop = vc.getScaledTouchSlop();
mMinFlingVelocity = vc.getScaledMinimumFlingVelocity() * 8; //获取滑动的最小速度
mMaxFlingVelocity = vc.getScaledMaximumFlingVelocity();
//获取滑动的最大速度
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
handleActionDown(ev);
case MotionEvent.ACTION_MOVE:
return handleActionMove(ev);
case MotionEvent.ACTION_UP:
handleActionUp(ev);
return super.onTouchEvent(ev);
* 按下事件处理
* @param ev
private void handleActionDown(MotionEvent ev) {
mDownX = ev.getX();
mDownY = ev.getY();
mDownPosition = pointToPosition((int) mDownX, (int) mDownY);
if (mDownPosition == AdapterView.INVALID_POSITION) {
mDownView = getChildAt(mDownPosition - getFirstVisiblePosition());
if (mDownView != null) {
mViewWidth = mDownView.getWidth();
//加入速度检测
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(ev);
* 处理手指滑动的方法
* @param ev
private boolean handleActionMove(MotionEvent ev) {
if (mVelocityTracker == null || mDownView == null) {
return super.onTouchEvent(ev);
// 获取X方向滑动的距离
float deltaX = ev.getX() - mDownX;
float deltaY = ev.getY() - mDownY;
// X方向滑动的距离大于mSlop并且Y方向滑动的距离小于mSlop,表示可以滑动
if (Math.abs(deltaX) & mSlop && Math.abs(deltaY) & mSlop) {
mSwiping =
//当手指滑动item,取消item的点击事件,不然我们滑动Item也伴随着item点击事件的发生
MotionEvent cancelEvent = MotionEvent.obtain(ev);
cancelEvent.setAction(MotionEvent.ACTION_CANCEL |
(ev.getActionIndex()&& MotionEvent.ACTION_POINTER_INDEX_SHIFT));
onTouchEvent(cancelEvent);
if (mSwiping) {
// 跟谁手指移动item
ViewHelper.setTranslationX(mDownView, deltaX);
// 透明度渐变
ViewHelper.setAlpha(mDownView, Math.max(0f, Math.min(1f, 1f - 2f * Math.abs(deltaX)/ mViewWidth)));
// 手指滑动的时候,返回true,表示SwipeDismissListView自己处理onTouchEvent,其他的就交给父类来处理
return super.onTouchEvent(ev);
* 手指抬起的事件处理
* @param ev
private void handleActionUp(MotionEvent ev) {
if (mVelocityTracker == null || mDownView == null|| !mSwiping) {
float deltaX = ev.getX() - mDownX;
//通过滑动的距离计算出X,Y方向的速度
puteCurrentVelocity(1000);
float velocityX = Math.abs(mVelocityTracker.getXVelocity());
float velocityY = Math.abs(mVelocityTracker.getYVelocity());
boolean dismiss = //item是否要滑出屏幕
boolean dismissRight =//是否往右边删除
//当拖动item的距离大于item的一半,item滑出屏幕
if (Math.abs(deltaX) & mViewWidth / 2) {
dismissRight = deltaX & 0;
//手指在屏幕滑动的速度在某个范围内,也使得item滑出屏幕
} else if (mMinFlingVelocity &= velocityX
&& velocityX &= mMaxFlingVelocity && velocityY & velocityX) {
dismissRight = mVelocityTracker.getXVelocity() & 0;
if (dismiss) {
ViewPropertyAnimator.animate(mDownView)
.translationX(dismissRight ? mViewWidth : -mViewWidth)//X轴方向的移动距离
.setDuration(mAnimationTime)
.setListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
//Item滑出界面之后执行删除
performDismiss(mDownView, mDownPosition);
//将item滑动至开始位置
ViewPropertyAnimator.animate(mDownView)
.translationX(0)
.setDuration(mAnimationTime).setListener(null);
//移除速度检测
if(mVelocityTracker != null){
mVelocityTracker.recycle();
mVelocityTracker =
mSwiping =
* 在此方法中执行item删除之后,其他的item向上或者向下滚动的动画,并且将position回调到方法onDismiss()中
* @param dismissView
* @param dismissPosition
private void performDismiss(final View dismissView, final int dismissPosition) {
final ViewGroup.LayoutParams lp = dismissView.getLayoutParams();//获取item的布局参数
final int originalHeight = dismissView.getHeight();//item的高度
ValueAnimator animator = ValueAnimator.ofInt(originalHeight, 0).setDuration(mAnimationTime);
animator.start();
animator.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
if (onDismissCallback != null) {
onDismissCallback.onDismiss(dismissPosition);
//这段代码很重要,因为我们并没有将item从ListView中移除,而是将item的高度设置为0
//所以我们在动画执行完毕之后将item设置回来
ViewHelper.setAlpha(dismissView, 1f);
ViewHelper.setTranslationX(dismissView, 0);
ViewGroup.LayoutParams lp = dismissView.getLayoutParams();
lp.height = originalH
dismissView.setLayoutParams(lp);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator valueAnimator) {
//这段代码的效果是ListView删除某item之后,其他的item向上滑动的效果
lp.height = (Integer) valueAnimator.getAnimatedValue();
dismissView.setLayoutParams(lp);
* 删除的回调接口
* @author xiaanming
public interface OnDismissCallback {
public void onDismiss(int dismissPosition);
看过Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果你会发现,这个自定义的SwipeDismissListView只重写了onTouchEvent()方法,其实我们重写这一个方法就能实现我们需要的效果
1. 我们先看手指按下屏幕的处理方法handleActionDown();该方法里面根据我们手指按下的点根据pointToPosition()方法来获取我们点击的position,然后利用getChildAt()来获取我们按下的item的View对象,并且加入手指在屏幕滑动的速度检查,这一步相对来说还是比较简单
2. 接下来就是手指在屏幕上面滑动的处理方法handleActionMove(),这个方法就稍微的复杂些,我们需要根据手指在X轴的滑动距离和Y轴的滑动距离来判断是ListView item的水平滑动还是ListView的上下滑动,当满足Math.abs(deltaX) & mSlop && Math.abs(deltaY) & mSlop这个条件时候,我们用一个布尔值mSwiping来标记Item现在处于水平滑动的状态,这时候我们需要处理Item跟随手指的滑动而滑动的逻辑,我们使用ViewHelper来处理Item的滑动逻辑,这个类会根据机器的SDK版本来判断使用Android系统的API还是NineOldandroids中自己实现的API使得View滑动的效果,NineOldandroids中主要使用Camera(可以实现各种复杂动画效果的类),我们直接使用ViewHelper的setTranslationX()和setAlpha()就实现了item滑动和透明度渐变的效果,为了使得我们在滑动item的时候,ListView不上下滚动,我们必须返回true来屏蔽ListView的上下滚动,这里需要我们要非常熟悉Android的事件分发机制,这里我就不说明了,大家不了解的去网上找找相关的文章看看
还有一个问题,就是当我们滑动ListView的item的时候,会伴随着item的点击事件,这不是我们想要的效果,所以当Item滑动的时候我们需要取消ListView Item的点击事件
3. 在看手指抬起的时候的处理方法handleActionUp(),这里面需要根据手指的滑动速度或者Item移动的距离来判断Item是滑出屏幕还是滑动至起始位置,并且要判断item向左还是向右滑出屏幕等等逻辑,具体的逻辑可以看代码,相信大家都看得懂.
我这里要说说ViewPropertyAnimator类,这个类能更好的实现一个View同时进行多个动画的功能,当然我们也可以使用ObjectAnimator利用AnimatorSet来实现一个View上的多个同时进行的动画效果,例如我们可以将
ViewPropertyAnimator.animate(mDownView)
.translationX(dismissRight ? mViewWidth : -mViewWidth)//X轴方向的移动距离
.setDuration(mAnimationTime)
.setListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
//Item滑出界面之后执行删除
performDismiss(mDownView, mDownPosition);
AnimatorSet set = new AnimatorSet();
set.playTogether(ObjectAnimator.ofFloat(mDownView, translationX, dismissRight ? mViewWidth : -mViewWidth),
ObjectAnimator.ofFloat(mDownView, alpha, 0));
set.setDuration(mAnimationTime).start();
set.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
//Item滑出界面之后执行删除
performDismiss(mDownView, mDownPosition);
在效果上面是一样的,但是ViewPropertyAnimator在性能上要比使用ObjectAnimator来实现多个同时进行的动画要高的多,举个例子,假如要对View使用移动和透明度的动画,使用ViewPropertyAnimator的话,某个时间点上我们只需要调用一次invalidate()方法刷新界面就行了,而使用ObjectAnimator的话,移动的动画需要调用invalidate(),透明度的动画也需要调用invalidate()方法,在性能上使用AnimationSet比ViewPropertyAnimator要低,但是有的时候我们还是需要使用ObjectAnimator,比如,在某个时间内,我们需要将View先变大在变小在变大等复杂情况,这时候ObjectAnimator就派上用场了,例如
ObjectAnimator.ofInt(mDownView, scaleX, 0 ,100 ,0, 100).setDuration(100).start()
通过上面的几步我们就实现了ListView的左右滑动删除item的效果啦,但是还有一个效果,item删除之后,ListView的其他item向上或者向下缓缓滑动的效果,实现这个也很容易,就是动态设置item的高度,item高度逐渐变小,这样其他的item就会出现向上或者向下挤压的效果啦!
4. 这里我们使用的是ValueAnimator这个类,这个类并不是针对View作用的动画,而是对某个值作用的动画,他默认使用的Interpolator(插补器)是AccelerateDecelerateInterpolator(开始和结束的时候慢,中间快) , 举个很简单的例子,我们在10秒内使用ValueAnimator将某个值从0变化到100,如果使用LinearInterpolator(线性插补器,匀速变化)在第2秒的时候,这个值变成了20,而是用AccelerateDecelerateInterpolator,可能在第二秒的时候这个值为15或者13,所以我们在ValueAnimator变化的时候设置值动画变化的监听器AnimatorUpdateListener就知道某个时间这个值变成了多少,从而对View的某个属性进行设置(例如大小),所以ValueAnimator是间接的对View设置动画的
了解了ValueAnimator的使用原理,我们就可以现实上面的动画效果了,我们使用ValueAnimator将item的高度变成0,设置ValueAnimator变化的监听,我们在回调函数onAnimationUpdate()中动态的设置item的高度, 然后添加AnimatorListener监听动画的状态(例如动画开始,结束,重复等)监听,在动画结束的回调函数onAnimationEnd()中删除该item的数据,调用notifyDataSetChanged刷新ListView,看看下面这段代码
ViewHelper.setAlpha(dismissView, 1f);
ViewHelper.setTranslationX(dismissView, 0);
ViewGroup.LayoutParams lp = dismissView.getLayoutParams();
lp.height = originalH
dismissView.setLayoutParams(lp);
我们使用动画只是将item移动出了屏幕,并且将item的高度设置为了0,并没有将item的View从ListView中Remove掉,况且ListView也不能直接Remove掉Item的,只能将数据源删除,在调用notifyDataSetChanged()刷新,所以我们需要将刚刚滑出屏幕高度设置为0的Item恢复回来
自定义控件的代码我们已经编写完了,接下来我们就要使用它了,先看界面的布局代码
很简单,一个RelativeLayout包裹我们自定义的ListView控件,接下来就是主界面的代码编写,跟平常的ListView使用一样,但是我们需要设置OnDismissCallback()监听,在
onDismiss()中删除该位置对于的数据,刷新ListView
package com.example.
import java.util.ArrayL
import java.util.L
import android.app.A
import android.os.B
import android.view.V
import android.widget.AdapterV
import android.widget.AdapterView.OnItemClickL
import android.widget.ArrayA
import android.widget.T
import com.example.swipedismisslistview.SwipeDismissListView.OnDismissC
public class SwipeActivity extends Activity {
private SwipeDismissListView swipeDismissListV
private ArrayAdapter
private List dataSourceList = new ArrayList();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe);
private void init() {
swipeDismissListView = (SwipeDismissListView) findViewById(R.id.swipeDismissListView);
for (int i = 0; i & 20; i++) {
dataSourceList.add(滑动删除 + i);
adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1,
android.R.id.text1, dataSourceList);
swipeDismissListView.setAdapter(adapter);
swipeDismissListView.setOnDismissCallback(new OnDismissCallback() {
public void onDismiss(int dismissPosition) {
adapter.remove(adapter.getItem(dismissPosition));
swipeDismissListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View view,
int position, long id) {
Toast.makeText(SwipeActivity.this, adapter.getItem(position), Toast.LENGTH_SHORT).show();
所有的代码都已经编写完毕了,接下来就是运行工程,看看具体的效果是不是我们想要的
好了,今天的讲解到这里结束了,有了NineOldAndroids我们可以在2.x的手机上面实现许多复杂的动画效果,文章也介绍了关于开源库NineOldAndroids使用的一些知识,文章有点长,希望读者还是先将文章看下,然后自己看看能不能自己实现出来,有什么不明白的地方请在下面留言,我会为大家解答的!
项目,点击下载
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。阅读语段,回答问题。
从织布机到计算机
你知道织布机和计算机有什么相同之处吗?它们之间的血缘关系超乎你的想象。摆在写字台上的台式机,塞在口袋里的掌上电脑,挂在腰上的移动电话,乃至你家中的很多家用电器,都是1804年诞生的一台织布机的后代。
19世纪早期,法国里昂的丝织工人们织出了图案绚丽的丝绸锦缎,然而他们使用的工具却是质量低劣、效率低下的老式手工提花机。这种机器要有人站在上面,费力地一根一根地将丝线提起、放下,才能织出精细复杂的丝绸,就好像演员在操纵牵线木偶。
这种烦琐的劳动随着1804年雅尔提花机的发明发生了改变。这种革命性的织布机利用预先打孔的卡片来控制织物的编织式样,速度比老式手工提花机快了25倍,就好比从自行车到汽车的飞跃。雅卡尔的打孔卡片不只为丝织业带来革命,也为人类从此打开了一扇信息控制的大门。
1836年,雅卡尔去世两年之后,计算机科学先驱、著名的英国科学家查尔斯·巴比奇制造了一台木齿铁轮计算机,用来计算很多数学难题,并利用雅卡尔打孔卡片的原理为这台计算机编程。当时巴比奇的女友称这台木齿铁轮计算机就如同提花织布一样,在编织代数模型。虽然他没有使用语言编程(一个世纪以后才正式出现),但是巴比奇毕竟提出了为计算机编程的思想,这一理念启发了20世纪的计算机科学家。后来,人们将巴比奇称为计算机的鼻祖。
19世纪末,美国统计学家赫尔曼·霍尔瑞斯借鉴雅尔的打孔卡片发明了一种特殊的机器,供户口调查员处理数据。在19世纪的最后几十年里,美国的人口出现了爆炸性的增长,人口普查变得越来越难以操作,要想对一次人普查的数据进行加工和处理,至少要花上十年的时间。这部被霍尔瑞斯称为“制表机”的机器大大提高了人口数据处理的速度。制表机的原理与雅卡尔提花机很接近,它在卡片上打出一系列的小孔,代表每一个家庭的每一位公民,不同的孔包含不同的信息。只要运用得当,制表机每小时可以处理几万张卡片。
20世纪40年代,IBM公司开始制造计算机,计算机的时代到来了。不过那时的计算机没有放弃类似于雅卡尔提花机上的那种打孔卡片,还在利用它编程。这种状况一直延续到20世纪80年代后期,打孔卡片最终被电子媒介——磁带和光盘所取代。
看到这里,也许我们可以说,计算机不过是台极高级的织布机而已。这是多么令人惊奇的事情,我们现在视为尖端科技的计算机,竟与织布机血脉相连。当你使用计算机的时候,本质上你也是在以光速做着编织工作。
1.阅读全文,完成下在的填空。
本文以&&& 为顺序,介绍了雅卡尔发明的用&&&&&&&&&&& 控制织物的提花机,巴比奇制造的木齿铁轮计算机,霍尔瑞斯发明的被称为&&&&&&& 的机器,IBM公司制造的计算机。
2.人们为什么把巴比奇称为计算机的鼻祖?
3.本文主要运用了作比较的方法,请举一例,并分析其作用。
4.从雅卡尔提花机的发明,到现代计算机的诞生,你从中得到什么启示?
阅读下面的文字,分别回答问题。
从织布机到计算机
你知道织布机和计算机有什么相同之处吗?它们之间的血缘关系超乎你的想像。摆在写字台上的台式机,塞在口袋里的掌上电脑,挂在腰上的移动电话,乃至你家中的很多家用电器,都是1804年诞生的一台织布机的后代。
19世纪早期,法国里昂的丝织工人们织出了图案绚丽的丝绸锦缎,然而他们使用的工具却是质量低劣、效率低下的老式手工提花机。这种机器需要有人站在上面,费力地一根一根地将丝线提起、放下,才能织出精细复杂的丝绸,就好像演员在操纵牵线木偶。
这种烦琐的劳动随着1804年雅卡尔提花机的发明发生了改变。这种革命性的织布机利用预先打孔的卡片来控制织物的编织式样,速度比老式手工提花机快了25倍,就好比从自行车到汽车的飞跃。雅卡尔的打孔卡片不只为丝织业带来革命,也为人类从此打开了一扇信息控制的大门。
1836年,雅卡尔去世两年之后,计算机科学先驱、著名的英国科学家查尔斯·巴比奇制造了一台木齿铁轮计算机,用来计算很多数学难题,并利用雅卡尔打孔卡片的原理为这台计算机编程。当时巴比奇的女友称这台木齿铁轮计算机就如同提花织布机一样,在编织代数模型。虽然他没有使用语言编程(一个世纪以后才正式出现),但是巴比奇毕竟提出了为计算机编程的思想,这一理念启发了20世纪的计算机科学家。后来,人们将巴比奇称为计算机的鼻祖。
19世纪末,美国统计学家赫尔曼·霍尔瑞斯借鉴雅卡尔的打孔卡片发明了一种特殊的机器,供户口调查员处理数据。在19世纪的最后几十年里,美国的人口出现了爆炸性的增长,人口普查变得越来越难以操作,要想对一次人口普查的数据进行加工和处理,至少要花上十年的时间。这部被霍尔瑞斯称为“制表机”的机器大大提高了人口数据处理的速度。制表机的原理与雅卡尔提花机很接近,它在卡片上打出一系列的小孔,代表每一个家庭的每一位公民,不同的孔包含不同的信息。只要运用得当,制表机每小时可以处理几万张卡片。
20世纪40年代,IBM公司开始制造计算机,计算机的时代到来了。不过那时候的计算机没有放弃类似于雅卡尔提花机上的那种打孔卡片,还在利用它编程。这种状况一直延续到20世纪80年代后期,打孔卡片最终被电子媒介——磁带和光盘所取代。
看到这里,也许我们可以说,计算机不过是台极其高级的织布机而已。这是多么令人惊奇的事情,我们现在视为尖端科技的计算机,竟与织布机血脉相连。当你使用计算机的时候,本质上你也是在以光速做着编织工作。
1.阅读全文,完成下面的填空。
本文以&&&&&&&& 为顺序,介绍了雅卡尔发明的用&&&&&&&& 控制织物的提花机,巴比奇制造的木齿铁轮计算机,霍尔瑞斯发明的被称为&&&&&& 的机器,IBM公司制造的计算机。
2.人们为什么把巴比奇称为计算机的鼻祖?
3.为什么说计算机是“l804年诞生的一台织布机的后代”?
4.本文主要运用了作比较的方法,请举出两例,并加以说明。
5.从雅卡尔提花机的发明,到现代计算机的诞生,你从中得到哪些启示?请分条列出两点。
阅读下文,回答问题。
  从织布机到计算机
  你知道织布机和计算机有什么相同之处吗?它们之间的血缘关系超乎你的想像。摆在写字台上的台式机,塞在口袋里的掌上电脑,挂在腰上的移动电话,乃至你家中的很多家用电器,都是1804年诞生的一台织布机的后代。
  19世纪早期,法国里昂的丝织工人们织出了图案绚丽的丝绸锦缎,然而他们使用的工具却是质量低劣、效率低下的老式手工提花机。这种机器需要有人站在上面,费力地一根一根地将丝线提起、放下,才能织出精细复杂的丝绸,就好像演员在操纵牵线木偶。
  这种繁琐的劳动随着1804年雅卡尔提花机的发明发生了改变。这种革命性的织布机利用预先打孔的卡片来控制织物的编织式样,速度比老式手工提花机快了25倍,就好比从自行车到汽车的飞跃。雅卡尔的打孔卡片不只为丝织业带来革命,也为人类从此打开了一扇信息控制的大门。
  1836年,雅卡尔去世两年之后,计算机科学先驱、著名的英国科学家查尔斯·巴比奇制造了一台木齿铁轮计算机,用来计算很多数学难题,并利用雅卡尔打孔卡片的原理为这台计算机编程。当时巴比奇的女友称这台木齿铁轮计算机就如同提花机织布一样,在编织代数模型。虽然他并没有使用语言编程(一个世纪以后才正式出现),但是巴比奇毕竟提出了为计算机编程的思想,这一理念启发了20世纪的计算机科学家们。后来人们将巴比奇称为计算机的鼻祖。
  19世纪末,美国统计学家赫尔曼·霍尔瑞斯借鉴雅卡尔的打孔卡片发明了一种特殊的机器,供户口调查员处理数据。在19世纪的最后几十年里,美国的人口出现了爆炸性的增长,人口普查变得越来越难以操作。要想对一次人口普查的数据进行加工和处理,至少要花上10年的时间。这部被霍尔瑞斯称为“制表机”的机器大大提高了人口数据处理的速度。制表机的原理与雅卡尔提花机很接近,它在卡片上打出一系列的小孔,代表每一个家庭的每一位公民,不同的孔包含不同的信息。只要运用得当,制表机每小时可以处理几万张卡片。
  20世纪40年代,IBM开始制造计算机,计算机的时代到来了。不过那时候的计算机没有放弃类似于雅卡尔提花机上的那种打孔卡片,还在利用它编程。这种状况一直延续到20世纪80年代后期,打孔卡片最终被电子媒介--磁带和光盘所取代。
  看到这里,也许我们可以说,计算机不过是一台极其高级的织布机而已。这是多么令人惊奇的事情,我们现在视为尖端科技的计算机,竟与织布机血脉相连。当你使用计算机的时候,本质上你也是在以光速做着编织工作。(1)
阅读全文,完成下面的填空。
  本文以________为顺序,介绍了雅卡尔发明的用_________控制织物的提花机,巴比奇制造的木齿铁轮计算机,霍尔瑞斯发明的被称为_________的机器,IBM公司制造的计算机。
人们为什么把巴比奇称为计算机的鼻祖?
为什么说计算机是“1804年诞生的一台织布机的后代”?
本文主要运用了作比较的方法,请举出两例,并加以说明。
从雅卡尔提花机的发明,到现代计算机的诞生,你从中得到哪些启示?请分条列出两点。
阅读文段,回答问题。
从织布机到计算机  你知道织布机和计算机有什么相同之处吗?它们之间的血缘关系超乎你的想象。摆在写字台上的台式机,塞在口袋里的掌上电脑,挂在腰上的移动电话,乃至你家中的很多家用电器,都是1804年诞生的一台织布机的后代。  19世纪早期,法国里昂的丝织工人们织出了图案绚丽的丝绸锦缎,然而他们使用的工具却是质量低劣、效率低下的老式手工提花机。这种机器需要有人站在上面,费力地一根一根地将丝线.提起、放下,才能织出精细复杂的丝绸,就好像演员在操纵牵线木偶。  这种烦琐的劳动随着1804年雅卡尔提花机的发明发生了改变。这种革命性的织布机利用预先打孔的卡片来控制织物的编织式样,速度比老式手工提花机快了25倍,就好比从自行车到汽车的飞跃。雅卡尔的打孔卡片不只为丝织业带来革命,也为人类从此打开了一扇信息控制的大门。  1836年,雅卡尔去世:两年之后,计算机科学先驱、著名的英国科学家查尔斯·巴比奇制造了一台木齿铁轮计算机,用来计算很多数学难题,并利用雅卡尔打孔卡片的原理为这台计算机编程。当时巴比奇的女友称这台木齿铁轮计算机就如同提花织布一样,在编织代数模型。革然他没有使用语言编程(一个世纪以后才正式出现),但是巴比奇毕竟提出了为计算机编程的思想,这一理念启发了20世纪的计算机科学家。后来,人们将巴比奇称为计算机的鼻祖。  19世纪未,美国统计学家赫尔曼·霍尔瑞斯借鉴雅卡尔的打孔卡片发明了一种特殊的机器,供户口调查员处理数据。在19世纪的最后几十年里,美国的人口出现了爆炸性的增长,人口普查变得越来越难以操作,要想对一次人口普查的数据进行加工和处理,至少要花上十年的时间。这部被霍尔瑞斯称为“制表机”的机器大大提高了人口数据处理的速度。制表机的原理与雅卡尔提花机很接近,它在卡片上打出一系列的小孔,代表每一个家庭的每一位公民,不同的孔包含不同的信息。只要运用得当,制表机每小时可以处理几万张卡片。  20世纪40年代,IBM公司开始制造计算机,计算机的时代到来了。不过那时候的计算机没有放弃类似于雅卡尔提花机上的那种打孔卡片,还在利用它编程。这种状况一直延续到20世纪80年代后期,打孔卡片最终被电子媒介——磁带和光盘所取代。  看到这里,也许我们可以说,计算机不过是台极其高级的织布机而已。这是多么令人惊奇的事情,我们现在视为尖端科技的计算机,竟与织布机血脉相连。当你使用计算机的时候,本质上你也是在以光速做着编织工作。1。阅读全文,完成下面的填空。本文以为________顺序,介绍了雅卡尔发明的用________控制织物的提花机,巴比奇制造的木齿铁轮计算机,霍尔瑞斯发明的被称为________的机器,IBM公司制造的计算机。2.人们为什么把巴比奇称为计算机的鼻祖?_____________________________3.为什么说计算机是“1804年诞生的一台织布机的后代”?_____________________________4.本文主要运用了作比较的方法,请举出两例,并加以说明。_____________________________5.从雅卡尔提花机的发明,到现代计算机的诞生,你从中得到哪些启示?请分条列出两点。_____________________________

我要回帖

更多关于 html5 滑动删除 的文章

 

随机推荐