轮播图+展示数据
MainActivity-xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="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=".mvp.view.MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:text="首頁" /><com.youth.banner.Bannerandroid:id="@+id/main_banner"android:layout_width="match_parent"android:layout_height="200dp"></com.youth.banner.Banner><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="文章展示" /><TextViewandroid:layout_alignParentRight="true"android:id="@+id/main_allwz"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="全部文章>" /></RelativeLayout><android.support.v7.widget.RecyclerViewandroid:id="@+id/main_wenzhang"android:layout_width="match_parent"android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="熱門案例" /><android.support.v7.widget.RecyclerViewandroid:id="@+id/main_hotshow"android:layout_width="match_parent"android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView></LinearLayout> </ScrollView>WebActivity-xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="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=".mvp.view.WebActivity"><WebViewandroid:id="@+id/web_web"android:layout_width="match_parent"android:layout_height="match_parent"></WebView> </android.support.constraint.ConstraintLayout>AllActivity-xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".mvp.view.AllWzActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:text="全部文章" /><android.support.v7.widget.RecyclerViewandroid:id="@+id/all_rv"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </LinearLayout>all_item-xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"><com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/all_item_img"android:layout_width="200dp"android:layout_height="100dp"app:placeholderImage="@mipmap/ic_launcher" /><TextViewandroid:id="@+id/all_item_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_marginTop="24dp"android:layout_toEndOf="@+id/all_item_img"android:text="標題" /> </RelativeLayout>hot_item-xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:orientation="vertical"><com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/hot_item_img"android:layout_width="match_parent"android:layout_height="200dp"app:placeholderImage="@mipmap/ic_launcher" /><TextViewandroid:id="@+id/hot_item_title"android:layout_width="wrap_content"android:layout_height="wrap_content" /> </LinearLayout>wenzhangz_itm-xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/wenzhang_item_img"android:layout_width="match_parent"android:layout_height="160dp"app:placeholderImage="@mipmap/ic_launcher" /><TextViewandroid:id="@+id/wenzhang_item_title"android:layout_width="wrap_content"android:layout_height="wrap_content"/> </LinearLayout>MyApp
import android.app.Application;import com.facebook.drawee.backends.pipeline.Fresco;public class MApp extends Application {@Overridepublic void onCreate() {super.onCreate();Fresco.initialize(this);} }Constant
public class Constant {public static final String BASE_URL = "https://app.tuozhe8.com/"; }MyLoader
import android.content.Context; import android.net.Uri; import android.widget.ImageView;import com.facebook.drawee.view.SimpleDraweeView; import com.youth.banner.loader.ImageLoader;public class MyLoader extends ImageLoader {@Overridepublic void displayImage(Context context, Object path, ImageView imageView) {imageView.setImageURI(Uri.parse((String) path));}@Overridepublic ImageView createImageView(Context context) {return new SimpleDraweeView(context);} }Retrofit
import com.bw.yuekao.baen.AllBean; import com.bw.yuekao.baen.BannerBean; import com.bw.yuekao.baen.HotBean; import com.bw.yuekao.baen.WenZhang;import io.reactivex.Observable; import retrofit2.http.GET;public interface MyRetrofit {//banner數據@GET("api.php/api/Lists/banner_list?token=&version=1.7")Observable<BannerBean> getBanner();//文章展示@GET("api.php/api/Lists/content_lists?token=&version=1.7&type=4")Observable<WenZhang> getWenZhang();//熱門案例@GET("api.php/api/Lists/hot_case?version=1.7&token=&page=1")Observable<HotBean> getHotBean();//全部文章@GET("api.php/api/Lists/content_lists?token=&version=1.7&page=1&type=2")Observable<AllBean> getAll(); }RetrofitUtil
import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory;public class RetrofitUtil {private final Retrofit retrofit;private HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);private static final RetrofitUtil RETROFIT_UTIL = new RetrofitUtil();private RetrofitUtil() {retrofit = new Retrofit.Builder().baseUrl(Constant.BASE_URL).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).client(getOkClient()).build();}private OkHttpClient getOkClient() {return new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build();}public static RetrofitUtil getRetrofitUtil() {return RETROFIT_UTIL;}public <T> T create(Class<T> clazz) {return retrofit.create(clazz);} }mvp-model-IndexModel
import com.bw.yuekao.baen.AllBean; import com.bw.yuekao.baen.BannerBean; import com.bw.yuekao.baen.HotBean; import com.bw.yuekao.baen.WenZhang; import com.bw.yuekao.util.MyRetrofit; import com.bw.yuekao.util.RetrofitUtil;import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers;public class IndexModel {private CompositeDisposable compositeDisposable = new CompositeDisposable();public void getBanner(final IndexModelCallBack callBack) {RetrofitUtil.getRetrofitUtil().create(MyRetrofit.class).getBanner().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<BannerBean>() {@Overridepublic void onSubscribe(Disposable d) {compositeDisposable.add(d);}@Overridepublic void onNext(BannerBean bannerBean) {callBack.onGetBanner(bannerBean);}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}public void getWenZhang(final IndexModelCallBack callBack) {RetrofitUtil.getRetrofitUtil().create(MyRetrofit.class).getWenZhang().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<WenZhang>() {@Overridepublic void onSubscribe(Disposable d) {compositeDisposable.add(d);}@Overridepublic void onNext(WenZhang wenZhang) {callBack.getWenZhang(wenZhang);}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}public void getHot(final IndexModelCallBack callBack) {RetrofitUtil.getRetrofitUtil().create(MyRetrofit.class).getHotBean().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<HotBean>() {@Overridepublic void onSubscribe(Disposable d) {compositeDisposable.add(d);}@Overridepublic void onNext(HotBean hotBean) {callBack.getHot(hotBean);}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}public void getAll(final IndexModelCallBack callBack) {RetrofitUtil.getRetrofitUtil().create(MyRetrofit.class).getAll().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<AllBean>() {@Overridepublic void onSubscribe(Disposable d) {compositeDisposable.add(d);}@Overridepublic void onNext(AllBean allBean) {callBack.getAll(allBean);}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}//解決內存泄露public void onDestroy() {compositeDisposable.clear();} }mvp-model-IndexModelCallBack
import com.bw.yuekao.baen.AllBean; import com.bw.yuekao.baen.BannerBean; import com.bw.yuekao.baen.HotBean; import com.bw.yuekao.baen.WenZhang;public interface IndexModelCallBack {void onGetBanner(BannerBean bannerBean);void getWenZhang(WenZhang wenZhang);void getHot(HotBean hotBean);void getAll(AllBean allBean); }mvp-presenter-IndexPresenter
import com.bw.yuekao.baen.AllBean; import com.bw.yuekao.baen.BannerBean; import com.bw.yuekao.baen.HotBean; import com.bw.yuekao.baen.WenZhang; import com.bw.yuekao.mvp.model.IndexModel; import com.bw.yuekao.mvp.model.IndexModelCallBack; import com.bw.yuekao.mvp.view.IndexView;import java.lang.ref.WeakReference;public class IndexPresenter {private IndexModel model;private IndexView view;private WeakReference<IndexView> weakReference;public IndexPresenter(IndexView iView) {this.view = iView;model = new IndexModel();weakReference = new WeakReference(view);}public void getBanner() {model.getBanner(new IndexModelCallBack() {@Overridepublic void onGetBanner(BannerBean bannerBean) {view.onGetBannerSuccess(bannerBean);}@Overridepublic void getWenZhang(WenZhang wenZhang) {}@Overridepublic void getHot(HotBean hotBean) {}@Overridepublic void getAll(AllBean allBean) {}});}public void getWenZhang() {model.getWenZhang(new IndexModelCallBack() {@Overridepublic void onGetBanner(BannerBean bannerBean) {}@Overridepublic void getWenZhang(WenZhang wenZhang) {view.onGetWenZhangSuccess(wenZhang);}@Overridepublic void getHot(HotBean hotBean) {}@Overridepublic void getAll(AllBean allBean) {}});}public void getHot() {model.getHot(new IndexModelCallBack() {@Overridepublic void onGetBanner(BannerBean bannerBean) {}@Overridepublic void getWenZhang(WenZhang wenZhang) {}@Overridepublic void getHot(HotBean hotBean) {view.onGetHotSuccess(hotBean);}@Overridepublic void getAll(AllBean allBean) {}});}public void getAll() {model.getAll(new IndexModelCallBack() {@Overridepublic void onGetBanner(BannerBean bannerBean) {}@Overridepublic void getWenZhang(WenZhang wenZhang) {}@Overridepublic void getHot(HotBean hotBean) {}@Overridepublic void getAll(AllBean allBean) {view.onGetAllSuccess(allBean);}});}//解決內存泄露public void onDestroy() {model.onDestroy();if (weakReference != null && weakReference.get() != null) {weakReference.clear();weakReference = null;view = null;}} }mvp-view-IndexView
import com.bw.yuekao.baen.AllBean; import com.bw.yuekao.baen.BannerBean; import com.bw.yuekao.baen.HotBean; import com.bw.yuekao.baen.WenZhang;public interface IndexView {void onGetBannerSuccess(BannerBean bannerBean);void onGetWenZhangSuccess(WenZhang wenZhang);void onGetHotSuccess(HotBean hotBean);void onGetAllSuccess(AllBean allBean); }mvp-view-MainActivity
import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView;import com.bw.yuekao.R; import com.bw.yuekao.adapter.HotAdapter; import com.bw.yuekao.adapter.WenZhangAdapter; import com.bw.yuekao.baen.AllBean; import com.bw.yuekao.baen.BannerBean; import com.bw.yuekao.baen.HotBean; import com.bw.yuekao.baen.WenZhang; import com.bw.yuekao.mvp.presenter.IndexPresenter; import com.bw.yuekao.util.MyLoader; import com.youth.banner.Banner; import com.youth.banner.listener.OnBannerListener;import org.greenrobot.eventbus.EventBus;import java.util.ArrayList; import java.util.List;import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder;public class MainActivity extends AppCompatActivity implements IndexView {@BindView(R.id.main_banner)Banner mainBanner;@BindView(R.id.main_wenzhang)RecyclerView mainWenzhang;@BindView(R.id.main_hotshow)RecyclerView mainHotshow;private Unbinder unbinder;private IndexPresenter presenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);unbinder = ButterKnife.bind(this);presenter = new IndexPresenter(this);initView();}private void initView() {//請求bannerpresenter.getBanner();//文章展示mainWenzhang.setLayoutManager(new GridLayoutManager(this, 1, LinearLayoutManager.HORIZONTAL, false));presenter.getWenZhang();//熱門案例mainHotshow.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));presenter.getHot();}@Overridepublic void onGetBannerSuccess(BannerBean bannerBean) {final List<BannerBean.DataBean> data = bannerBean.getData();List<String> images = new ArrayList<>();for (BannerBean.DataBean bean : data) {images.add(bean.getLogo());}mainBanner.setImages(images).setImageLoader(new MyLoader()).isAutoPlay(true).setOnBannerListener(new OnBannerListener() {@Overridepublic void OnBannerClick(int position) {String share_links = data.get(position).getShare_links();EventBus.getDefault().postSticky(share_links);startActivity(new Intent(MainActivity.this,WebActivity.class));}}).start();}@Overridepublic void onGetWenZhangSuccess(WenZhang wenZhang) {List<WenZhang.DataBean.ArticleBean> article = wenZhang.getData().getArticle();WenZhangAdapter adapter = new WenZhangAdapter(article);mainWenzhang.setAdapter(adapter);}@Overridepublic void onGetHotSuccess(HotBean hotBean) {List<HotBean.DataBean> data = hotBean.getData();HotAdapter adapter = new HotAdapter(data);mainHotshow.setAdapter(adapter);}@Overridepublic void onGetAllSuccess(AllBean allBean) {}//解決內存泄露@Overrideprotected void onDestroy() {super.onDestroy();unbinder.unbind();presenter.onDestroy();presenter = null;}@OnClick(R.id.main_allwz)public void onViewClicked() {startActivity(new Intent(this, AllWzActivity.class));} }mvp-view-AllActivity
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView;import com.bw.yuekao.R; import com.bw.yuekao.adapter.AllAdapter; import com.bw.yuekao.baen.AllBean; import com.bw.yuekao.baen.BannerBean; import com.bw.yuekao.baen.HotBean; import com.bw.yuekao.baen.WenZhang; import com.bw.yuekao.mvp.presenter.IndexPresenter;import java.util.List;import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder;public class AllWzActivity extends AppCompatActivity implements IndexView {@BindView(R.id.all_rv)RecyclerView allRv;private IndexPresenter presenter;private Unbinder unbinder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_all_wz);unbinder = ButterKnife.bind(this);presenter = new IndexPresenter(this);initView();}private void initView() {allRv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));presenter.getAll();}@Overridepublic void onGetBannerSuccess(BannerBean bannerBean) {}@Overridepublic void onGetWenZhangSuccess(WenZhang wenZhang) {}@Overridepublic void onGetHotSuccess(HotBean hotBean) {}@Overridepublic void onGetAllSuccess(AllBean allBean) {List<AllBean.DataBean> data = allBean.getData();AllAdapter adapter = new AllAdapter(data);allRv.setAdapter(adapter);}@Overrideprotected void onDestroy() {super.onDestroy();presenter.onDestroy();presenter = null;unbinder.unbind();} }mvp-view-WebActivity
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.WebView; import android.webkit.WebViewClient;import com.bw.yuekao.R;import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode;import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder;public class WebActivity extends AppCompatActivity {@BindView(R.id.web_web)WebView webWeb;private Unbinder unbinder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_web);unbinder = ButterKnife.bind(this);EventBus.getDefault().register(this);webWeb.setWebViewClient(new WebViewClient());}@Overrideprotected void onDestroy() {super.onDestroy();unbinder.unbind();EventBus.getDefault().unregister(this);}@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)public void getMsg(String link) {if (link != null)webWeb.loadUrl(link);} }AllAdapter
import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import com.bw.yuekao.R; import com.bw.yuekao.baen.AllBean; import com.facebook.drawee.view.SimpleDraweeView;import java.util.List;import butterknife.BindView; import butterknife.ButterKnife;public class AllAdapter extends RecyclerView.Adapter {private List<AllBean.DataBean> list;private Context context;public AllAdapter(List<AllBean.DataBean> list) {this.list = list;}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {context = parent.getContext();View view = LayoutInflater.from(context).inflate(R.layout.all_item, parent, false);ViewHolder holder = new ViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {ViewHolder viewHolder = (ViewHolder) holder;AllBean.DataBean bean = list.get(position);viewHolder.allItemImg.setImageURI(Uri.parse(bean.getLogo()));viewHolder.allItemTitle.setText(bean.getTitle());}@Overridepublic int getItemCount() {return list.size();}static class ViewHolder extends RecyclerView.ViewHolder {@BindView(R.id.all_item_img)SimpleDraweeView allItemImg;@BindView(R.id.all_item_title)TextView allItemTitle;ViewHolder(View view) {super(view);ButterKnife.bind(this, view);}} }HotAdapter
import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import com.bw.yuekao.R; import com.bw.yuekao.baen.HotBean; import com.facebook.drawee.view.SimpleDraweeView;import java.util.List;import butterknife.BindView; import butterknife.ButterKnife;public class HotAdapter extends RecyclerView.Adapter {private List<HotBean.DataBean> list;private Context context;public HotAdapter(List<HotBean.DataBean> list) {this.list = list;}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {context = parent.getContext();View view = LayoutInflater.from(context).inflate(R.layout.hot_item, parent, false);ViewHolder holder = new ViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {ViewHolder viewHolder = (ViewHolder) holder;HotBean.DataBean bean = list.get(position);viewHolder.hotItemImg.setImageURI(Uri.parse(bean.getLogo()));viewHolder.hotItemTitle.setText(bean.getTitle());}@Overridepublic int getItemCount() {return list.size();}static class ViewHolder extends RecyclerView.ViewHolder {@BindView(R.id.hot_item_img)SimpleDraweeView hotItemImg;@BindView(R.id.hot_item_title)TextView hotItemTitle;ViewHolder(View view) {super(view);ButterKnife.bind(this, view);}} }WenZhangAdapter
import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import com.bw.yuekao.R; import com.bw.yuekao.baen.WenZhang; import com.facebook.drawee.view.SimpleDraweeView;import java.util.List;import butterknife.BindView; import butterknife.ButterKnife;public class WenZhangAdapter extends RecyclerView.Adapter {private List<WenZhang.DataBean.ArticleBean> list;private Context context;public WenZhangAdapter(List<WenZhang.DataBean.ArticleBean> list) {this.list = list;}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {context = parent.getContext();View view = LayoutInflater.from(context).inflate(R.layout.wenzhang_item, parent, false);ViewHolder holder = new ViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {ViewHolder viewHolder = (ViewHolder) holder;WenZhang.DataBean.ArticleBean bean = list.get(position);viewHolder.wenzhangItemImg.setImageURI(Uri.parse(bean.getLogo()));viewHolder.wenzhangItemTitle.setText(bean.getTitle());}@Overridepublic int getItemCount() {return list.size();}static class ViewHolder extends RecyclerView.ViewHolder {@BindView(R.id.wenzhang_item_img)SimpleDraweeView wenzhangItemImg;@BindView(R.id.wenzhang_item_title)TextView wenzhangItemTitle;ViewHolder(View view) {super(view);ButterKnife.bind(this, view);}} }?
總結
- 上一篇: 如何发包到npmjs上
- 下一篇: 应用计算机测定线性电阻电路图和实物图,中