package com.example.aswitch;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private MyToggleButton toggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toggleButton = (MyToggleButton) findViewById(R.id.toggle_button);
toggleButton.setOnStateChangedListener(new MyToggleButton.OnStateChangedListener() {
@Override
public void onStateChanged(boolean state) {
Toast.makeText(MainActivity.this, state ? "开" : "关", Toast.LENGTH_SHORT).show();
}
});
}
}
package com.example.aswitch;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by huang on 2016/12/1.
*/
public class MyToggleButton extends View {
private Bitmap background;
private Bitmap slideIcon;
private boolean state;
private OnStateChangedListener mOnStateChangedListener;
private int backgroundWidth;
private int backgroundHeight;
private int slideIconWidth;
private int slideIconHeight;
private int slideIconLeft;
private int maxSlideIconLeft;
public MyToggleButton(Context context, AttributeSet attrs) {
super(context, attrs);
String namespace = "http://schemas.android.com/apk/res-auto";
int slideBackgroundResId = attrs.getAttributeResourceValue(namespace, "slideBackground", -1);
int slideIconResId = attrs.getAttributeResourceValue(namespace, "slideIcon", -1);
if (slideBackgroundResId != -1 && slideIconResId != -1) {
setSwitchImage(slideBackgroundResId, slideIconResId);
}
boolean state = attrs.getAttributeBooleanValue(namespace, "state", false);
setState(state);
}
/**
* 设置开关的图片
* @param slideBackgroundResId 开关的背景图片资源id
* @param slideIconResId 开关上面的滑块icon
*/
public void setSwitchImage(int slideBackgroundResId, int slideIconResId) {
background = BitmapFactory.decodeResource(getResources(), slideBackgroundResId);
slideIcon = BitmapFactory.decodeResource(getResources(), slideIconResId);
backgroundWidth = background.getWidth();
backgroundHeight = background.getHeight();
slideIconWidth = slideIcon.getWidth();
slideIconHeight = slideIcon.getHeight();
maxSlideIconLeft = backgroundWidth - slideIconWidth;
}
/** 设置开关按钮的状态 */
public void setState(boolean state) {
checkState(state);
if (state) {
slideIconLeft = maxSlideIconLeft;
} else {
slideIconLeft = 0;
}
}
public void setOnStateChangedListener(OnStateChangedListener mOnStateChangedListener) {
this.mOnStateChangedListener = mOnStateChangedListener;
}
/** 开关按钮状态改变的监听器 */
public interface OnStateChangedListener {
void onStateChanged(boolean state);
}
/**
* 对View进行测量的方法
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(backgroundWidth, backgroundHeight);
}
/** 把View画出来的方法
* @param canvas 画布
* */
@Override
protected void onDraw(Canvas canvas) {
int left = 0;
int top = 0;
canvas.drawBitmap(background, left, top, null);
canvas.drawBitmap(slideIcon, slideIconLeft, 0, null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
slideIconLeft = (int) (event.getX() - slideIconWidth / 2);
if (slideIconLeft < 0) {
slideIconLeft = 0;
} else if (slideIconLeft > maxSlideIconLeft) {
slideIconLeft = maxSlideIconLeft;
}
break;
case MotionEvent.ACTION_UP:
if (event.getX() < backgroundWidth / 2) {
slideIconLeft = 0;
checkState(false);
} else {
slideIconLeft = maxSlideIconLeft;
checkState(true);
}
break;
}
invalidate();
return true;
}
private void checkState(boolean state) {
if (this.state != state) {
this.state = state;
if (mOnStateChangedListener != null) {
mOnStateChangedListener.onStateChanged(state);
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:huang="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.aswitch.MyToggleButton
android:id="@+id/toggle_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
huang:slideBackground="@mipmap/slide_background2"
huang:slideIcon="@mipmap/slide_icon2"
huang:state="false" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyToggleButton">
<attr name="slideBackground" format="reference" />
<attr name="slideIcon" format="reference" />
<attr name="state" format="boolean" />
</declare-styleable>
</resources>
package com.example.pulltofreshlistview;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import com.example.pulltofreshlistview.view.PullToRefreshListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView listView;
private ArrayList<String> datas;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (PullToRefreshListView) findViewById(R.id.list_view);
datas = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
datas.add("我又捡到钱了,好开心啊^_^ \t" + i);
}
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas);
listView.setAdapter(adapter);
listView.setOnRefreshingListener(new PullToRefreshListView.OnRefreshingListener() {
@Override
public void onRefreshing() {
reloadData();
}
@Override
public void onLoadMore() {
loadMore();
}
});
}
/**
* 重新联网获取数据
*/
protected void reloadData() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
datas.add(0, "我是刷新出来的数据");
adapter.notifyDataSetChanged();
listView.onRefreshComplete();
}
}, 3000);
}
/**
* 联网加载更多数据
*/
protected void loadMore() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
datas.add("我是加载更多出来的数据");
adapter.notifyDataSetChanged();
listView.onLoadmoreComplete();
}
}, 3000);
}
}
package com.example.pulltofreshlistview.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.RotateAnimation;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.example.pulltofreshlistview.R;
/**
* Created by huang on 2016/12/1.
*/
public class PullToRefreshListView extends ListView {
private View headerView;
private float downY;
private int headerViewHeight;
private static final int STATE_PULL_TO_REFRESH = 0;
private static final int STATE_RELEASE_REFRESH = 1;
private static final int STATE_REFRESHING = 2;
private int currentState = STATE_PULL_TO_REFRESH; // 默认是下拉刷新状态
private ImageView iv_arrow;
private ProgressBar progress_bar;
private TextView tv_state;
private RotateAnimation upAnim;
private RotateAnimation downAnim;
private OnRefreshingListener mOnRefreshingListener;
private View footerView;
private int footerViewHeight;
private boolean loadingMore;
public PullToRefreshListView(Context context, AttributeSet attrs) {
super(context, attrs);
initHeaderView();
initFooterView();
}
private void initHeaderView() {
headerView = View.inflate(getContext(), R.layout.header_view, null);
iv_arrow = (ImageView) headerView.findViewById(R.id.iv_arrow);
progress_bar = (ProgressBar) headerView.findViewById(R.id.progress_bar);
showRefreshingProgressBar(false);
tv_state = (TextView) headerView.findViewById(R.id.tv_state);
headerView.measure(0, 0);
headerViewHeight = headerView.getMeasuredHeight();
hideHeaderView();
super.addHeaderView(headerView);
upAnim = createRotateAnim(0f, -180f);
downAnim = createRotateAnim(-180f, -360f);
}
private void initFooterView() {
footerView = View.inflate(getContext(), R.layout.footer_view, null);
footerView.measure(0, 0);
footerViewHeight = footerView.getMeasuredHeight();
hideFooterView();
super.addFooterView(footerView);
super.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
&& getLastVisiblePosition() == getCount() - 1
&& loadingMore == false
) {
loadingMore = true;
showFooterView();
setSelection(getCount() - 1);
if (mOnRefreshingListener != null) {
mOnRefreshingListener.onLoadMore();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
private void hideFooterView() {
int paddingTop = -footerViewHeight;
setFooterViewPaddingTop(paddingTop);
}
private void showFooterView() {
int paddingTop = 0;
setFooterViewPaddingTop(paddingTop);
}
private void setFooterViewPaddingTop(int paddingTop) {
footerView.setPadding(0, paddingTop, 0, 0);
}
/**
* 设置显示进度的圈圈
*
* @param showProgressBar 如果是true,则显示ProgressBar,否则的话显示箭头
*/
private void showRefreshingProgressBar(boolean showProgressBar) {
progress_bar.setVisibility(showProgressBar ? View.VISIBLE : View.GONE);
iv_arrow.setVisibility(!showProgressBar ? View.VISIBLE : View.GONE);
if (showProgressBar) {
iv_arrow.clearAnimation(); // 有动画的View要清除动画才能真正的隐藏
}
}
/**
* 创建旋转动画
*
* @param fromDegrees 从哪个角度开始转
* @param toDegrees 转到哪个角度
* @return
*/
private RotateAnimation createRotateAnim(float fromDegrees, float toDegrees) {
int pivotXType = RotateAnimation.RELATIVE_TO_SELF;
int pivotYType = RotateAnimation.RELATIVE_TO_SELF;
float pivotXValue = 0.5f;
float pivotYValue = 0.5f;
RotateAnimation ra = new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue);
ra.setDuration(300);
ra.setFillAfter(true);
return ra;
}
/**
* 隐藏HeaderView
*/
private void hideHeaderView() {
int paddingTop = -headerViewHeight;
setHeaderViewPaddingTop(paddingTop);
}
/**
* 显示HeaderView
*/
private void showHeaderView() {
int paddingTop = 0;
setHeaderViewPaddingTop(paddingTop);
}
/**
* 设置HeaderView的paddingTop
*
* @param paddingTop
*/
private void setHeaderViewPaddingTop(int paddingTop) {
headerView.setPadding(0, paddingTop, 0, 0);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
if (currentState == STATE_REFRESHING) {
return super.onTouchEvent(ev);
}
int fingerMoveDistanceY = (int) (ev.getY() - downY); // 手指移动的距离
if (fingerMoveDistanceY > 0 && getFirstVisiblePosition() == 0) {
int paddingTop = -headerViewHeight + fingerMoveDistanceY;
setHeaderViewPaddingTop(paddingTop);
if (paddingTop < 0 && currentState != STATE_PULL_TO_REFRESH) {
currentState = STATE_PULL_TO_REFRESH;
tv_state.setText("下拉刷新");
iv_arrow.startAnimation(downAnim);
showRefreshingProgressBar(false);
} else if (paddingTop >= 0 && currentState != STATE_RELEASE_REFRESH) {
currentState = STATE_RELEASE_REFRESH;
tv_state.setText("松开刷新");
iv_arrow.startAnimation(upAnim);
showRefreshingProgressBar(false);
}
return true;
}
break;
case MotionEvent.ACTION_UP:
if (currentState == STATE_RELEASE_REFRESH) {
currentState = STATE_REFRESHING;
tv_state.setText("正在刷新");
showRefreshingProgressBar(true);
showHeaderView();
if (mOnRefreshingListener != null) {
mOnRefreshingListener.onRefreshing();
}
} else if (currentState == STATE_PULL_TO_REFRESH) {
hideHeaderView();
}
break;
}
return super.onTouchEvent(ev);
}
public void setOnRefreshingListener(OnRefreshingListener mOnRefreshingListener) {
this.mOnRefreshingListener = mOnRefreshingListener;
}
/**
* ListView刷新的监听器
*/
public interface OnRefreshingListener {
void onRefreshing();
void onLoadMore();
}
/**
* 联网刷新数据的操作已经完成了
*/
public void onRefreshComplete() {
hideHeaderView();
currentState = STATE_PULL_TO_REFRESH;
showRefreshingProgressBar(false);
}
/**
* 加载更多新数据的操作已经完成了
*/
public void onLoadmoreComplete() {
hideFooterView();
loadingMore = false;
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.example.pulltofreshlistview.view.PullToRefreshListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical" >
<RelativeLayout
android:layout_width="50dp"
android:layout_height="50dp">
<ImageView
android:id="@+id/iv_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/arrow"
android:layout_centerInParent="true"/>
<ProgressBar
android:id="@+id/progress_bar"
style="@android:style/Widget.ProgressBar"
android:indeterminateDrawable="@drawable/progress_medium_red"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_centerInParent="true"
android:visibility="gone"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF0000"
android:text="下拉刷新"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#666666"
android:textSize="12sp"
android:text="最后刷新时间:2015-07-25 19:59:39"
android:layout_marginTop="4dp"/>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<ProgressBar
style="@android:style/Widget.ProgressBar"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:indeterminateDrawable="@drawable/progress_medium_red" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:text="加载更多..."
android:textColor="#FF0000" />
</LinearLayout>
package com.example.slidingmenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private SlidingMenu sliding_menu;
private LinearLayout ll_menu;
private TextView tv_news;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
sliding_menu = (SlidingMenu) findViewById(R.id.sliding_menu);
ll_menu = (LinearLayout) findViewById(R.id.ll_menu);
tv_news = (TextView) findViewById(R.id.tv_news);
setCurrentSelectedMenuItem(tv_news);
}
/** 设置当前选择的菜单Item */
private void setCurrentSelectedMenuItem(View menuItem) {
for (int i = 0; i < ll_menu.getChildCount(); i++) {
View child = ll_menu.getChildAt(i);
child.setSelected(child == menuItem);
}
}
/** 菜单列表中的某个菜单项被单击了 */
public void onMenuItemClick(View v) {
TextView textView = (TextView) v;
Toast.makeText(this, textView.getText(), Toast.LENGTH_SHORT).show();
setCurrentSelectedMenuItem(v);
}
/** 主界面上的菜单按钮被单击了 */
public void onMenuToggleClick(View v) {
sliding_menu.toggle();
}
}
package com.example.slidingmenu;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Scroller;
/**
* Created by huang on 2016/12/1.
*/
public class SlidingMenu extends ViewGroup {
private View menu;
private View main;
private int menuWidth;
private int downX;
private int currentX;
/** 这个类专门用于模拟滚动的数值 */
private Scroller scroller;
public SlidingMenu(Context context, AttributeSet attrs) {
super(context, attrs);
scroller = new Scroller(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec); // 测量容器自己的宽高
menu = getChildAt(0); // 获取菜单容器
main = getChildAt(1); // 获取主界面容器
menuWidth = menu.getLayoutParams().width; // 获取菜单的宽
// 测量菜单
menu.measure(menuWidth, heightMeasureSpec);
// 测量主界面
main.measure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int menuLeft = -menuWidth;
int menuTop = 0;
int menuRight = 0;
int menuBottom = b - t;
menu.layout(menuLeft, menuTop, menuRight, menuBottom);
int mainLeft = 0;
int mainTop = 0;
int mainRight = r - l;
int mainBottom = b - t;
main.layout(mainLeft, mainTop, mainRight, mainBottom);
}
/**
* 让界面滚动到x的位置,传正数往右移,传负往左移
* @param x
*/
public void scrollTo(int x) {
super.scrollTo(-x, 0);
}
/** 获取当前滑动到的位置 */
public int getMyScrollX() {
return -super.getScrollX();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = (int) ev.getY();
downX = (int) ev.getX();
break;
case MotionEvent.ACTION_MOVE:
int distanceX = Math.abs((int) (ev.getX() - downX));
int distanceY = Math.abs((int) (ev.getY() - downY));
if (distanceX > distanceY) {
return true;
}
break;
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = (int) event.getX();
break;
case MotionEvent.ACTION_MOVE:
int fingerMoveDistanceX = (int) event.getX() - downX;
int destX = currentX + fingerMoveDistanceX;
if (destX < 0) {
destX = 0;
} else if (destX > menuWidth){
destX = menuWidth;
}
scrollTo(destX);
break;
case MotionEvent.ACTION_UP:
if (getMyScrollX() < menuWidth / 2) {
startScroll(0);
} else {
startScroll(menuWidth);
}
break;
}
return true;
}
int count;
private int downY;
/**
* 以动画的方式滚动到指定的位置
*
* @param destX 要滑动到哪里(目标位置)
*/
private void startScroll(int destX) {
currentX = destX;
int startX = getMyScrollX();
int distatnceX = destX - startX;
int duration = 800;
scroller.startScroll(startX, 0, distatnceX, 0, duration);
invalidate();
}
@Override
public void computeScroll() {
if (scroller.computeScrollOffset()) {
int currX = scroller.getCurrX();
scrollTo(currX);
invalidate();
count++;
}
System.out.println("count = " + count);
}
/** 菜单的开关按钮,要么开,要么关 */
public void toggle() {
if (getMyScrollX() > 0) {
startScroll(0);
} else {
startScroll(menuWidth);
}
}
}
<?xml version="1.0" encoding="utf-8"?> <com.example.slidingmenu.SlidingMenu xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/sliding_menu" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 在SlidingMenu中的索引0 --> <include layout="@layout/menu" /> <!-- 在SlidingMenu中的索引1 --> <include layout="@layout/main" /> </com.example.slidingmenu.SlidingMenu>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@mipmap/top_bar_bg"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onMenuToggleClick"
android:src="@mipmap/main_back" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginBottom="6dp"
android:layout_marginTop="6dp"
android:background="@mipmap/top_bar_divider" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:text="新闻"
android:textColor="@android:color/white"
android:textSize="34sp" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="为了一个小馒头,友谊的小船说翻就翻"
android:textSize="30sp" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="@mipmap/menu_bg">
<LinearLayout
android:id="@+id/ll_menu"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_news"
android:text="新闻"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_news"/>
<TextView
android:text="订阅"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_read"/>
<TextView
android:text="本地"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_local"/>
<TextView
android:text="跟贴"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_ties"/>
<TextView
android:text="图片"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_pics"/>
<TextView
android:text="话题"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_ugc"/>
<TextView
android:text="投票"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_vote"/>
<TextView
android:text="聚合阅读"
style="@style/menu_item"
android:drawableLeft="@mipmap/tab_focus"/>
</LinearLayout>
</ScrollView>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有