android真实项目教程(六)——落叶醉赤壁_by_CJJ

大家晚上好,我是cjj,今天不讲废话,因为我被“忙”了。。。  
    今晚主要把关于的界面(aboutFragment)完成了。。。  效果很好哦 (自吹一下)。。。呵呵。。。其中有两个比较好的效果。 一、 PullScrollView,仿照新浪微博Android客户端个人中心的ScrollView,下拉背景伸缩回弹效果。它还有一种效果是仿IOS回弹效果。 二、点击列表,慢慢张开一个View的自定义动画(animation)。。。
           android真实项目教程(一)——App应用框架搭建_by_CJJ      http://www.apkbus.com/forum.php?mod=viewthread&tid=166151
           android真实项目教程(二)——漫画App初构_by_CJJ         http://www.apkbus.com/forum.php?mod=viewthread&tid=166262
           android真实项目教程(三)——首页初点缀_by_CJJ             http://www.apkbus.com/forum.php?mod=viewthread&tid=166630
          android真实项目教程(四)——MY APP MY STYLE_by_CJJ    http://www.apkbus.com/forum.php?mod=viewthread&tid=167676
          android真实项目教程(五)——有时三点两点雨_by_CJJ     http://www.apkbus.com/forum.php?mod=viewthread&tid=168422

看下效果吧:
        



主要源码:
  1. package com.cjj.shopapp.fragment;


  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.view.ViewGroup;
  8. import android.view.animation.Animation;
  9. import android.view.animation.Animation.AnimationListener;
  10. import android.view.animation.RotateAnimation;
  11. import android.widget.ImageView;
  12. import android.widget.TextView;
  13. import android.widget.Toast;

  14. import com.cjj.shopapp.activity.R;
  15. import com.cjj.shopapp.animation.ExpandAnimation;
  16. import com.cjj.shopapp.custom.view.PullScrollView;
  17. import com.cjj.shopapp.custom.view.PullScrollView.OnTurnListener;

  18. /**
  19. * 关于界面

  20. * @author Administrator

  21. */
  22. public class AboutFragment extends Fragment implements OnClickListener,
  23.                 OnTurnListener {
  24.         private final int MAX_LINES = 4;
  25.         private boolean isClickable = false;
  26.         private TextView tv_info, tv_load_more;
  27.         // 自定义的scrollview
  28.         private PullScrollView mPullScrollView;
  29.         // about 背景图
  30.         private ImageView img_bigShopLogo;

  31.         private TextView tv_Contact;
  32.         private TextView tv_ContactContent;

  33.         private boolean isAnimEnd = true;

  34.         private ImageView img_otherContactArrow;

  35.         @Override
  36.         public void onActivityCreated(Bundle savedInstanceState) {
  37.                 mPullScrollView.init(img_bigShopLogo);
  38.                 mPullScrollView.setOnTurnListener(AboutFragment.this);
  39.                 super.onActivityCreated(savedInstanceState);
  40.         }

  41.         @Override
  42.         public void onCreate(Bundle savedInstanceState) {
  43.                 super.onCreate(savedInstanceState);
  44.         }

  45.         @Override
  46.         public View onCreateView(LayoutInflater inflater, ViewGroup container,
  47.                         Bundle savedInstanceState) {
  48.                 View v = inflater.inflate(R.layout.fragment_about, null);
  49.                 return v;
  50.         }

  51.         @Override
  52.         public void onDestroyView() {
  53.                 super.onDestroyView();
  54.         }

  55.         @Override
  56.         public void onViewCreated(View view, Bundle savedInstanceState) {
  57.                 super.onViewCreated(view, savedInstanceState);
  58.                 tv_info = (TextView) view.findViewById(R.id.tv_info);
  59.                 tv_info.setMaxLines(MAX_LINES);
  60.                 tv_load_more = (TextView) view.findViewById(R.id.tv_loadmore);
  61.                 tv_load_more.setOnClickListener(this);

  62.                 mPullScrollView = (PullScrollView) view.findViewById(R.id.sv_about);
  63.                 img_bigShopLogo = (ImageView) view.findViewById(R.id.img_bigShopLogo);

  64.                 tv_Contact = (TextView) view.findViewById(R.id.tv_otherContact);
  65.                 tv_Contact.setOnClickListener(this);
  66.                 tv_ContactContent = (TextView) view
  67.                                 .findViewById(R.id.tv_otherContactContent);

  68.                 img_otherContactArrow = (ImageView) view
  69.                                 .findViewById(R.id.img_otherContactArrow);
  70.                 img_otherContactArrow.measure(0, 0);
  71.         }

  72.         @Override
  73.         public void onClick(View v) {
  74.                 switch (v.getId()) {
  75.                 case R.id.tv_loadmore:
  76.                         if (!isClickable) {
  77.                                 tv_info.setMaxLines(tv_info.getLineCount());
  78.                                 tv_load_more.setText("收起");
  79.                                 isClickable = true;
  80.                         } else {
  81.                                 tv_info.setMaxLines(MAX_LINES);
  82.                                 tv_load_more.setText("查看更多");
  83.                                 isClickable = false;
  84.                         }
  85.                         break;
  86.                 case R.id.tv_otherContact:

  87.                         if (isAnimEnd) {

  88.                                 if (tv_ContactContent.getVisibility() == View.GONE) {
  89.                                         rotateArrow(0, 90);
  90.                                 } else {
  91.                                         rotateArrow(90, 0);
  92.                                 }

  93.                                 ExpandAnimation mAnimation = new ExpandAnimation(
  94.                                                 tv_ContactContent);
  95.                                 mAnimation.setAnimationListener(new ExpandAnimationListener());
  96.                                 tv_ContactContent.startAnimation(mAnimation);
  97.                         }
  98.                 }
  99.         }

  100.         /** 防止用户频繁操作 */
  101.         private class ExpandAnimationListener implements AnimationListener {

  102.                 @Override
  103.                 public void onAnimationStart(Animation animation) {

  104.                         isAnimEnd = false;
  105.                 }

  106.                 @Override
  107.                 public void onAnimationEnd(Animation animation) {

  108.                         isAnimEnd = true;
  109.                 }

  110.                 @Override
  111.                 public void onAnimationRepeat(Animation animation) {

  112.                 }
  113.         }

  114.         /**
  115.          * 旋转指示器
  116.          * 
  117.          * @param fromDegrees
  118.          * @param toDegrees
  119.          */
  120.         private void rotateArrow(float fromDegrees, float toDegrees) {
  121.                 RotateAnimation mRotateAnimation = new RotateAnimation(fromDegrees,
  122.                                 toDegrees,
  123.                                 (int) (img_otherContactArrow.getMeasuredWidth() / 2.0),
  124.                                 (int) (img_otherContactArrow.getMeasuredHeight() / 2.0));
  125.                 mRotateAnimation.setDuration(150);
  126.                 mRotateAnimation.setFillAfter(true);
  127.                 img_otherContactArrow.startAnimation(mRotateAnimation);
  128.         }

  129.         @Override
  130.         public void onTurn() {
  131.                 Toast.makeText(getActivity(), "拼命拉拉有惊喜哦!", 1000).show();
  132.         }

  133. }
复制代码
  1. package com.cjj.shopapp.custom.view;

  2. import android.content.Context;
  3. import android.graphics.Rect;
  4. import android.util.AttributeSet;
  5. import android.view.MotionEvent;
  6. import android.view.View;
  7. import android.view.animation.TranslateAnimation;
  8. import android.widget.ImageView;
  9. import android.widget.ScrollView;

  10. import com.cjj.shopapp.utils.ScreenUtils;

  11. /**
  12. * 自定义ScrollView
  13. *
  14. * @author MarkMjw
  15. * [url=home.php?mod=space&uid=354393]@DATE[/url] 2013-09-13
  16. */
  17. public class PullScrollView extends ScrollView {
  18.     /** 阻尼系数,越小阻力就越大. */
  19.     private static final float SCROLL_RATIO = 0.35f;

  20.     /** 滑动至翻转的距离. */
  21.     private static final int TURN_DISTANCE = 50;

  22.     /** 头部图片. */
  23.     private ImageView mHeadImage;

  24.     /** 头部图片显示高度. */
  25.     private int mHeadImageH;

  26.     /** 孩子View. */
  27.     private View mChildView;

  28.     /** ScrollView的孩子View矩形. */
  29.     private Rect mRect = new Rect();

  30.     /** 首次点击的Y坐标. */
  31.     private float mTouchDownY;

  32.     /** 是否关闭ScrollView的滑动. */
  33.     private boolean mEnableTouch = false;

  34.     /** 是否开始移动. */
  35.     private boolean isMoving = false;

  36.     /** 头部图片初始顶部和底部. */
  37.     private int mInitTop, mInitBottom;

  38.     /** 头部图片拖动时顶部和底部. */
  39.     private int mCurrentTop, mCurrentBottom;

  40.     /** 状态变化时的监听器. */
  41.     private OnTurnListener mOnTurnListener;

  42.     /** 状态:上部,下部,默认. */
  43.     private enum State {
  44.         UP, DOWN, NORMAL
  45.     }

  46.     /** 状态. */
  47.     private State state = State.NORMAL;

  48.     public PullScrollView(Context context) {
  49.         super(context);
  50.     }

  51.     public PullScrollView(Context context, AttributeSet attrs) {
  52.         super(context, attrs);
  53.     }

  54.     public PullScrollView(Context context, AttributeSet attrs, int defStyle) {
  55.         super(context, attrs, defStyle);
  56.     }

  57.     /**
  58.      * 初始化
  59.      *
  60.      * @param imageView 头部图片
  61.      */
  62.     public void init(ImageView imageView) {
  63.         mHeadImage = imageView;
  64.         mHeadImageH = ScreenUtils.dipConvertPx(94);
  65.     }

  66.     /**
  67.      * 设置状态改变时的监听器
  68.      *
  69.      * @param turnListener
  70.      */
  71.     public void setOnTurnListener(OnTurnListener turnListener) {
  72.         mOnTurnListener = turnListener;
  73.     }

  74.     /**
  75.      * 根据 XML 生成视图工作完成.该函数在生成视图的最后调用,在所有子视图添加完之后.
  76.      * 即使子类覆盖了 onFinishInflate 方法,也应该调用父类的方法,使该方法得以执行.
  77.      */
  78.     @Override
  79.     protected void onFinishInflate() {
  80.         if (getChildCount() > 0) {
  81.             mChildView = getChildAt(0);
  82.         }
  83.     }

  84.     @Override
  85.     protected void onScrollChanged(int l, int t, int oldl, int oldt) {
  86.         super.onScrollChanged(l, t, oldl, oldt);

  87.         // 当滚动到顶部时,将状态设置为正常,避免先向上拖动再向下拖动到顶端后首次触摸不响应的问题
  88.         if (getScrollY() == 0) {
  89.             state = State.NORMAL;
  90.         }
  91.     }

  92.     @Override
  93.     public boolean onTouchEvent(MotionEvent ev) {
  94.         if (mChildView != null) {
  95.             doTouchEvent(ev);
  96.         }

  97.         // 禁止控件本身的滑动.
  98.         if (mEnableTouch) {
  99.             return true;
  100.         } else {
  101.             return super.onTouchEvent(ev);
  102.         }
  103.     }

  104.     /**
  105.      * 触摸事件处理
  106.      *
  107.      * @param event
  108.      */
  109.     private void doTouchEvent(MotionEvent event) {
  110.         int action = event.getAction();

  111.         switch (action) {
  112.             case MotionEvent.ACTION_DOWN:
  113.                 mTouchDownY = event.getY();
  114.                 
  115.                 if(mHeadImage!=null)
  116.                 {
  117.                 mCurrentTop = mInitTop = mHeadImage.getTop();
  118.                 mCurrentBottom = mInitBottom = mHeadImage.getBottom();
  119.                 }
  120.                 break;

  121.             case MotionEvent.ACTION_MOVE:
  122.                 float deltaY = event.getY() - mTouchDownY;

  123.                 doActionMove(deltaY);
  124.                 break;

  125.             case MotionEvent.ACTION_UP:
  126.                 // 回滚动画
  127.                 if (isNeedAnimation()) {
  128.                     rollBackAnimation();
  129.                 }

  130.                 if (getScrollY() == 0) {
  131.                     state = State.NORMAL;
  132.                 }

  133.                 isMoving = false;
  134.                 mEnableTouch = false;
  135.                 break;

  136.             default:
  137.                 break;
  138.         }
  139.     }

  140.     /**
  141.      * 执行移动动画
  142.      *
  143.      * @param deltaY
  144.      */
  145.     private void doActionMove(float deltaY) {
  146.         // 对于首次Touch操作要判断方位:UP OR DOWN
  147.         if (deltaY < 0 && state == State.NORMAL) {
  148.             state = State.UP;
  149.         } else if (deltaY > 0 && state == State.NORMAL) {
  150.             state = State.DOWN;
  151.         }

  152.         if (state == State.UP) {
  153.             deltaY = deltaY < 0 ? deltaY : 0;

  154.             isMoving = false;
  155.             mEnableTouch = false;

  156.         } else if (state == State.DOWN) {
  157.             if (getScrollY() <= deltaY) {
  158.                 mEnableTouch = true;
  159.                 isMoving = true;
  160.             }
  161.             deltaY = deltaY < 0 ? 0 : deltaY;
  162.         }

  163.         if (isMoving) {
  164.             // 初始化头部矩形
  165.             if (mRect.isEmpty()) {
  166.                 // 保存正常的布局位置
  167.                 mRect.set(mChildView.getLeft(), mChildView.getTop(), mChildView.getRight(),
  168.                         mChildView.getBottom());
  169.             }

  170.             // 移动背景图(手势移动的距离*阻尼系数*0.5)
  171.             float bgMoveH = deltaY * 0.5f * SCROLL_RATIO;
  172.             mCurrentTop = (int) (mInitTop + bgMoveH);
  173.             mCurrentBottom = (int) (mInitBottom + bgMoveH);
  174.             
  175.             if(mHeadImage!=null)
  176.             {
  177.             mHeadImage.layout(mHeadImage.getLeft(), mCurrentTop, mHeadImage.getRight(), mCurrentBottom);
  178.             }
  179.             
  180.             // 移动布局(手势移动的距离*阻尼系数)
  181.             float childMoveH = deltaY * SCROLL_RATIO;

  182.             // 修正移动的距离,避免超过图片的底边缘
  183.             int top = mCurrentBottom - mHeadImageH;
  184.             if (mRect.top + childMoveH > top) {
  185.                 childMoveH -= mRect.top + childMoveH - top;
  186.             }

  187.             mChildView.layout(mRect.left, (int) (mRect.top + childMoveH),
  188.                     mRect.right, (int) (mRect.bottom + childMoveH));
  189.         }
  190.     }

  191.     /**
  192.      * 回滚动画
  193.      */
  194.     private void rollBackAnimation() {
  195.         TranslateAnimation image_Anim = new TranslateAnimation(0, 0,
  196.                 Math.abs(mInitTop - mCurrentTop), 0);
  197.         image_Anim.setDuration(200);
  198.         
  199.         if(mHeadImage!=null)
  200.         {
  201.         mHeadImage.startAnimation(image_Anim);

  202.         mHeadImage.layout(mHeadImage.getLeft(), mInitTop, mHeadImage.getRight(), mInitBottom);

  203.         }
  204.         
  205.         // 开启移动动画
  206.         TranslateAnimation inner_Anim = new TranslateAnimation(0, 0, mChildView.getTop(), mRect.top);
  207.         inner_Anim.setDuration(200);
  208.         mChildView.startAnimation(inner_Anim);
  209.         mChildView.layout(mRect.left, mRect.top, mRect.right, mRect.bottom);

  210.         mRect.setEmpty();

  211.         // 回调监听器
  212.         if (mCurrentTop > mInitTop + TURN_DISTANCE && mOnTurnListener != null){
  213.             mOnTurnListener.onTurn();
  214.         }
  215.     }

  216.     /**
  217.      * 是否需要开启动画
  218.      */
  219.     private boolean isNeedAnimation() {
  220.         return !mRect.isEmpty() && isMoving;
  221.     }

  222.     /**
  223.      * 执行翻转
  224.      *
  225.      * @author MarkMjw
  226.      */
  227.     public interface OnTurnListener {
  228.         /**
  229.          * 翻转回调方法
  230.          */
  231.         public void onTurn();
  232.     }
  233. }
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:background="#f0f0f0"
  6.     android:fadingEdge="none"
  7.     android:gravity="center"
  8.     android:orientation="vertical" >

  9.     <TextView
  10.         android:layout_width="match_parent"
  11.         android:layout_height="wrap_content"
  12.         android:drawableLeft="@drawable/qq"
  13.         android:ellipsize="end"
  14.         android:gravity="center_horizontal"
  15.         android:shadowDx="3.0"
  16.         android:shadowDy="3.0"
  17.         android:shadowRadius="5.0"
  18.         android:singleLine="true"
  19.         android:text="^_^ 拉拉更健康。。。"
  20.         android:textColor="@color/tv_blue"
  21.         android:textSize="20sp" />

  22.     <ImageView
  23.         android:id="@+id/img_bigShopLogo"
  24.         android:layout_width="match_parent"
  25.         android:layout_height="275dp"
  26.         android:layout_marginTop="-55dp"
  27.         android:contentDescription="@null"
  28.         android:scaleType="fitXY"
  29.         android:src="@drawable/about_bg4" />

  30.     <com.cjj.shopapp.custom.view.PullScrollView
  31.         android:id="@+id/sv_about"
  32.         android:layout_width="match_parent"
  33.         android:layout_height="match_parent"
  34.         android:fadingEdge="none"
  35.         android:fillViewport="true" >

  36.         <LinearLayout
  37.             android:layout_width="match_parent"
  38.             android:layout_height="match_parent"
  39.             android:orientation="vertical" >

  40.             <RelativeLayout
  41.                 android:layout_width="match_parent"
  42.                 android:layout_height="wrap_content"
  43.                 android:layout_marginTop="80dp" >

  44.                 <LinearLayout
  45.                     android:id="@+id/ll_top"
  46.                     android:layout_width="match_parent"
  47.                     android:layout_height="25dp"
  48.                     android:background="@android:color/transparent"
  49.                     android:orientation="horizontal" />

  50.                 <LinearLayout
  51.                     android:layout_width="match_parent"
  52.                     android:layout_height="wrap_content"
  53.                     android:layout_below="@id/ll_top"
  54.                     android:background="@color/app_default_bg_f5"
  55.                     android:orientation="vertical" >

  56.                     <FrameLayout
  57.                         android:id="@+id/user_divider_layout"
  58.                         android:layout_width="match_parent"
  59.                         android:layout_height="wrap_content"
  60.                         android:layout_marginLeft="21dp"
  61.                         android:layout_marginRight="21dp"
  62.                         android:layout_marginTop="50dp" >

  63.                         <ImageView
  64.                             android:layout_width="match_parent"
  65.                             android:layout_height="1px"
  66.                             android:layout_marginTop="5dp"
  67.                             android:background="#DFDFDF"
  68.                             android:contentDescription="@null" />

  69.                         <ImageView
  70.                             android:layout_width="wrap_content"
  71.                             android:layout_height="wrap_content"
  72.                             android:layout_marginLeft="29dp"
  73.                             android:contentDescription="@null"
  74.                             android:src="@drawable/line_arrow_up" />
  75.                     </FrameLayout>

  76.                     <TextView
  77.                         android:id="@+id/tv_info"
  78.                         android:layout_width="match_parent"
  79.                         android:layout_height="wrap_content"
  80.                         android:layout_marginBottom="5dp"
  81.                         android:layout_marginTop="5dp"
  82.                         android:maxLines="5"
  83.                         android:paddingLeft="10dp"
  84.                         android:paddingRight="10dp"
  85.                         android:text="@string/about_intro"
  86.                         android:textColor="@color/cs_66"
  87.                         android:textSize="15sp" />

  88.                     <TextView
  89.                         android:id="@+id/tv_loadmore"
  90.                         android:layout_width="match_parent"
  91.                         android:layout_height="wrap_content"
  92.                         android:layout_marginBottom="5dp"
  93.                         android:gravity="center_vertical|right"
  94.                         android:paddingLeft="21dp"
  95.                         android:paddingRight="21dp"
  96.                         android:text="查看更多 "
  97.                         android:textColor="@color/tv_blue"
  98.                         android:textSize="15sp" />

  99.                     <FrameLayout
  100.                         android:layout_width="match_parent"
  101.                         android:layout_height="wrap_content" >

  102.                         <TextView
  103.                             android:id="@+id/tv_otherContact"
  104.                             android:layout_width="match_parent"
  105.                             android:layout_height="48dp"
  106.                             android:layout_gravity="center"
  107.                             android:layout_marginTop="-2dp"
  108.                             android:background="@drawable/card_whole"
  109.                             android:gravity="center_vertical|left"
  110.                             android:padding="10dp"
  111.                             android:text="联系方式 "
  112.                             android:textColor="#515151"
  113.                             android:textSize="15sp" />

  114.                         <ImageView
  115.                             android:id="@+id/img_otherContactArrow"
  116.                             android:layout_width="wrap_content"
  117.                             android:layout_height="wrap_content"
  118.                             android:layout_gravity="center_vertical|right"
  119.                             android:layout_marginRight="10dp"
  120.                             android:src="@drawable/jiantou_down" />
  121.                     </FrameLayout>

  122.                     <TextView
  123.                         android:id="@+id/tv_otherContactContent"
  124.                         android:layout_width="match_parent"
  125.                         android:layout_height="wrap_content"
  126.                         android:drawableLeft="@drawable/qq"
  127.                         android:drawablePadding="4dp"
  128.                         android:gravity="center_vertical|left"
  129.                         android:padding="6dp"
  130.                         android:text="QQ : 929178101"
  131.                         android:textColor="@color/tv_blue"
  132.                         android:textSize="16sp"
  133.                         android:visibility="gone"
  134.                          />

  135.                     <TextView
  136.                         android:id="@+id/tv_mainSales"
  137.                         android:layout_width="match_parent"
  138.                         android:layout_height="48dp"
  139.                         android:background="@drawable/card_whole"
  140.                         android:gravity="center_vertical|left"
  141.                         android:padding="10dp"
  142.                         android:text="SUMMARY : MY APP MY STYLE _by_CJJ"
  143.                         android:textColor="@color/tv_blue"
  144.                         android:textSize="16sp" />
  145.                 </LinearLayout>

  146.                 <ImageView
  147.                     android:id="@+id/img_shopLogo"
  148.                     android:layout_width="68dp"
  149.                     android:layout_height="68dp"
  150.                     android:layout_marginLeft="21dp"
  151.                     android:background="@android:color/white"
  152.                     android:contentDescription="@null"
  153.                     android:padding="1px"
  154.                     android:scaleType="fitXY"
  155.                     android:src="@drawable/icon_about" />

  156.                 <TextView
  157.                     android:id="@+id/tv_shopName"
  158.                     android:layout_width="wrap_content"
  159.                     android:layout_height="wrap_content"
  160.                     android:layout_marginLeft="13dp"
  161.                     android:layout_toRightOf="@id/img_shopLogo"
  162.                     android:ellipsize="end"
  163.                     android:shadowColor="@android:color/black"
  164.                     android:shadowDx="3.0"
  165.                     android:shadowDy="3.0"
  166.                     android:shadowRadius="5.0"
  167.                     android:singleLine="true"
  168.                     android:text="CJJ漫画"
  169.                     android:textColor="@color/white"
  170.                     android:textSize="20sp" />

  171.                 <TextView
  172.                     android:id="@+id/tv_phone"
  173.                     android:layout_width="wrap_content"
  174.                     android:layout_height="wrap_content"
  175.                     android:layout_below="@+id/tv_shopName"
  176.                     android:layout_marginLeft="103dp"
  177.                     android:layout_marginTop="4dp"
  178.                     android:ellipsize="end"
  179.                     android:singleLine="true"
  180.                     android:text=" V1.0"
  181.                     android:textColor="@color/cs_66"
  182.                     android:textSize="16sp" />
  183.             </RelativeLayout>
  184.         </LinearLayout>
  185.     </com.cjj.shopapp.custom.view.PullScrollView>

  186. </RelativeLayout>
复制代码
很多细节的东西  你只要看下源码就懂了  呵呵   ,今晚就说这些了。。。我写烦人的论文去。。。
源码:
本帖隐藏的内容
由于文件太大,没有把库文件传上来,你可以在之前的文章中找到:   CartoonAppCjj.zip (15.52 MB, 下载次数: 17) 
我上传到csdn的下载网址(完整版):http://download.csdn.net/detail/junjichen/7267101

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资源 5来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 、3本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 、本项3目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReAdmE.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值