- 浏览: 1070780 次
- 性别:
- 来自: 南昌
-
文章分类
- 全部博客 (276)
- 生活 (1)
- 代码之美 (22)
- Media (7)
- Android Widget (3)
- Android Intent (1)
- Android Activity (4)
- UI event handle--UI事件处理机制 (2)
- Java基础知识 (12)
- android Databases (5)
- Android 系统知识 (70)
- 平常遇到的问题与解决方法 (38)
- Android TextView/EditView (2)
- Thinking Java (1)
- android webkit (6)
- JSON (1)
- XML (4)
- HTTP (1)
- Google Weather API (1)
- android 2.3 NFC (10)
- android app (20)
- android framework (7)
- C++ (2)
- android System (5)
- Pthread (1)
- Wifi (8)
- Unix/Linux C (8)
- Android 4.0 (1)
- Mail (1)
- Smack 源码学习 (4)
- iOS (4)
- Android (1)
- git (1)
- Gallery3d (2)
- React-Natice (1)
最新评论
-
dd18349182956:
你是用的smack哪个版本?我用的smack4.1.3和sma ...
关于socket长连接的心跳包 -
xukaiyin:
全英文
getApplicationContext()与this,getBaseContext() -
裂风矢:
...
<category android:name="android.intent.category.DEFAULT" /> 惹的祸 -
xanthodont:
mark一下
XMPP——Smack -
Evilover3:
mark一下,学习了
XMPP——Smack
再把QuickSearchBox放到桌面前,会先触发它的ConfigAcitivty,而这个config是对search 范围的选择:All, Web, Contact,Music...它的表现形式会有两种选择:一种是用ListView,另一种是用GridView.那么这里就会用到接口编程了。
我们先来看看用ListView显示的做法:Google将header+listview这样Activity用一个叫ChoiceActivty来实现,这样独立的模块,我们以后再开发的过程,若有需要也可以直接拿来用了,这样就做到了代码的重复利用了。
SearchWidgetConfigActivity就会继承ChoiceActivity:
protected CorpusView createView(ViewGroup parent) {
if (mGridView) {
return mViewFactory.createGridCorpusView(parent);
} else {
return mViewFactory.createListCorpusView(parent);
}
}这里就选择了是用GridView还是用ListView
这里就用到了接口编程的思想了:将一些规则抽象到CorpusViewFactory里面,那么通过CorpusViewFactory直接调用,不用管是如何实现的。真正的实现是在CorpusViewInflater。从代码看来若你想把ListView换成Gridview来表现,只需修改小部分代码:
1,SearchWidgetConfigActivity中:
@Override
protected void onStart() {
setAdapter(CorporaAdapter.createListAdapter(getViewFactory(), getCorpusRanker()));
super.onStart();
}
-->
@Override
protected void onStart() {
setAdapter(CorporaAdapter.createGridAdapter(getViewFactory(), getCorpusRanker()));
super.onStart();
}
2,ChoiceActivity中的choice_activity.xml
从这个例子中,可以看出了接口编程思想的重要与方便性。也许我讲得不是很清楚很明白,语言表达能力有限,只可意会不可言传。呵呵...
今天才发现,其实QuickSearchBox也用了GridView来显示search 范围的,是在CorpusSelectionDialog。
ListView的效果可以看附件里面的Listview.png,GridView看Gridview.png
我们先来看看用ListView显示的做法:Google将header+listview这样Activity用一个叫ChoiceActivty来实现,这样独立的模块,我们以后再开发的过程,若有需要也可以直接拿来用了,这样就做到了代码的重复利用了。
/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quicksearchbox; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; /** * Activity that shows a list of choices. */ public abstract class ChoiceActivity extends Activity { protected TextView mTitleView; protected ListView mChoicesView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.choice_activity); mTitleView = (TextView) findViewById(R.id.alertTitle); mChoicesView = (ListView) findViewById(R.id.list); } public void setHeading(int titleRes) { mTitleView.setText(titleRes); } public void setHeading(CharSequence title) { mTitleView.setText(title); } public void setAdapter(ListAdapter adapter) { mChoicesView.setAdapter(adapter); } public void setOnItemClickListener(AdapterView.OnItemClickListener listener) { mChoicesView.setOnItemClickListener(listener); // TODO: for some reason, putting this in the XML layout instead makes // the list items unclickable. mChoicesView.setFocusable(true); } }
SearchWidgetConfigActivity就会继承ChoiceActivity:
/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quicksearchbox; import com.android.quicksearchbox.ui.CorporaAdapter; import com.android.quicksearchbox.ui.CorpusViewFactory; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; /** * The configuration screen for search widgets. */ public class SearchWidgetConfigActivity extends ChoiceActivity { private static final boolean DBG = false; private static final String TAG = "QSB.SearchWidgetConfigActivity"; private static final String PREFS_NAME = "SearchWidgetConfig"; private static final String WIDGET_CORPUS_NAME_PREFIX = "widget_corpus_"; private static final String WIDGET_CORPUS_SHOWING_HINT_PREFIX = "widget_showing_hint_"; private CorporaAdapter mAdapter; private int mAppWidgetId; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setHeading(R.string.search_widget); setOnItemClickListener(new SourceClickListener()); Intent intent = getIntent(); mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { finish(); } // If there is only All, or only All and one other corpus, there is no // point in asking the user to select a corpus. if (getCorpusRanker().getRankedCorpora().size() <= 1) { selectCorpus(null); } } @Override protected void onStart() { setAdapter(CorporaAdapter.createListAdapter(getViewFactory(), getCorpusRanker())); super.onStart(); } @Override protected void onStop() { setAdapter(null); super.onStop(); } @Override public void setAdapter(ListAdapter adapter) { if (adapter == mAdapter) return; if (mAdapter != null) mAdapter.close(); mAdapter = (CorporaAdapter) adapter; super.setAdapter(adapter); } protected void selectCorpus(Corpus corpus) { setWidgetCorpusName(mAppWidgetId, corpus); SearchWidgetProvider.updateSearchWidgets(this); Intent result = new Intent(); result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, result); finish(); } private static SharedPreferences getWidgetPreferences(Context context) { return context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE); } private static String getCorpusNameKey(int appWidgetId) { return WIDGET_CORPUS_NAME_PREFIX + appWidgetId; } private static String getShowingHintKey(int appWidgetId) { return WIDGET_CORPUS_SHOWING_HINT_PREFIX + appWidgetId; } private void setWidgetCorpusName(int appWidgetId, Corpus corpus) { String corpusName = corpus == null ? null : corpus.getName(); SharedPreferences.Editor prefs = getWidgetPreferences(this).edit(); prefs.putString(getCorpusNameKey(appWidgetId), corpusName); prefs.commit(); } public static String getWidgetCorpusName(Context context, int appWidgetId) { SharedPreferences prefs = getWidgetPreferences(context); return prefs.getString(getCorpusNameKey(appWidgetId), null); } public static void setWidgetShowingHint(Context context, int appWidgetId, boolean showing) { SharedPreferences.Editor prefs = getWidgetPreferences(context).edit(); prefs.putBoolean(getShowingHintKey(appWidgetId), showing); boolean c = prefs.commit(); if (DBG) Log.d(TAG, "Widget " + appWidgetId + " set showing hint " + showing + "("+c+")"); } public static boolean getWidgetShowingHint(Context context, int appWidgetId) { SharedPreferences prefs = getWidgetPreferences(context); boolean r = prefs.getBoolean(getShowingHintKey(appWidgetId), false); if (DBG) Log.d(TAG, "Widget " + appWidgetId + " showing hint: " + r); return r; } private CorpusRanker getCorpusRanker() { return QsbApplication.get(this).getCorpusRanker(); } private CorpusViewFactory getViewFactory() { return QsbApplication.get(this).getCorpusViewFactory(); } private class SourceClickListener implements AdapterView.OnItemClickListener { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Corpus corpus = (Corpus) parent.getItemAtPosition(position); selectCorpus(corpus); } } }从setAdapter(CorporaAdapter.createListAdapter(getViewFactory(), getCorpusRanker()));不管是ListView还是用GrideView都会用到Adapter.
/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quicksearchbox.ui; import com.android.quicksearchbox.Corpus; import com.android.quicksearchbox.CorpusRanker; import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import java.util.ArrayList; import java.util.List; /** * Adapter for showing a list of sources in the source selection activity. */ public class CorporaAdapter extends BaseAdapter { private static final String TAG = "CorporaAdapter"; private static final boolean DBG = false; private final CorpusViewFactory mViewFactory; private final CorpusRanker mRanker; private final DataSetObserver mCorporaObserver = new CorporaObserver(); private List<Corpus> mRankedEnabledCorpora; private boolean mGridView; private CorporaAdapter(CorpusViewFactory viewFactory, CorpusRanker ranker, boolean gridView) { mViewFactory = viewFactory; mRanker = ranker; mGridView = gridView; mRanker.registerDataSetObserver(mCorporaObserver); updateCorpora(); } public static CorporaAdapter createListAdapter(CorpusViewFactory viewFactory, CorpusRanker ranker) { return new CorporaAdapter(viewFactory, ranker, false); } public static CorporaAdapter createGridAdapter(CorpusViewFactory viewFactory, CorpusRanker ranker) { return new CorporaAdapter(viewFactory, ranker, true); } private void updateCorpora() { mRankedEnabledCorpora = new ArrayList<Corpus>(); for (Corpus corpus : mRanker.getRankedCorpora()) { if (!corpus.isCorpusHidden()) { mRankedEnabledCorpora.add(corpus); } } notifyDataSetChanged(); } public void close() { mRanker.unregisterDataSetObserver(mCorporaObserver); } public int getCount() { return 1 + mRankedEnabledCorpora.size(); } public Corpus getItem(int position) { if (position == 0) { return null; } else { return mRankedEnabledCorpora.get(position - 1); } } public long getItemId(int position) { return position; } /** * Gets the position of the given corpus. */ public int getCorpusPosition(Corpus corpus) { if (corpus == null) { return 0; } int count = getCount(); for (int i = 0; i < count; i++) { if (corpus.equals(getItem(i))) { return i; } } Log.w(TAG, "Corpus not in adapter: " + corpus); return 0; } public View getView(int position, View convertView, ViewGroup parent) { CorpusView view = (CorpusView) convertView; if (view == null) { view = createView(parent); } Corpus corpus = getItem(position); Drawable icon; CharSequence label; if (corpus == null) { icon = mViewFactory.getGlobalSearchIcon(); label = mViewFactory.getGlobalSearchLabel(); } else { icon = corpus.getCorpusIcon(); label = corpus.getLabel(); } if (DBG) Log.d(TAG, "Binding " + position + ", label=" + label); view.setIcon(icon); view.setLabel(label); return view; } protected CorpusView createView(ViewGroup parent) { if (mGridView) { return mViewFactory.createGridCorpusView(parent); } else { return mViewFactory.createListCorpusView(parent); } } private class CorporaObserver extends DataSetObserver { @Override public void onChanged() { updateCorpora(); } @Override public void onInvalidated() { updateCorpora(); } } }
protected CorpusView createView(ViewGroup parent) {
if (mGridView) {
return mViewFactory.createGridCorpusView(parent);
} else {
return mViewFactory.createListCorpusView(parent);
}
}这里就选择了是用GridView还是用ListView
/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quicksearchbox.ui; import android.graphics.drawable.Drawable; import android.net.Uri; import android.view.ViewGroup; /** * Creates corpus views. */ public interface CorpusViewFactory { CorpusView createGridCorpusView(ViewGroup parentViewType); CorpusView createListCorpusView(ViewGroup parentViewType); String getGlobalSearchLabel(); Drawable getGlobalSearchIcon(); Uri getGlobalSearchIconUri(); }
/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quicksearchbox.ui; import com.android.quicksearchbox.R; import com.android.quicksearchbox.util.Util; import android.content.Context; import android.graphics.drawable.Drawable; import android.net.Uri; import android.view.LayoutInflater; import android.view.ViewGroup; /** * Inflates corpus views. */ public class CorpusViewInflater implements CorpusViewFactory { private final Context mContext; public CorpusViewInflater(Context context) { mContext = context; } protected LayoutInflater getInflater() { return (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public CorpusView createGridCorpusView(ViewGroup parentViewType) { return inflateCorpusView(R.layout.corpus_grid_item, parentViewType); } public CorpusView createListCorpusView(ViewGroup parentViewType) { return inflateCorpusView(R.layout.corpus_list_item, parentViewType); } protected CorpusView inflateCorpusView(int res, ViewGroup parentViewType) { return (CorpusView) getInflater().inflate(res, parentViewType, false); } public String getGlobalSearchLabel() { return mContext.getString(R.string.corpus_label_global); } private int getGlobalSearchIconResource() { return R.drawable.search_app_icon; } public Drawable getGlobalSearchIcon() { return mContext.getResources().getDrawable(getGlobalSearchIconResource()); } public Uri getGlobalSearchIconUri() { return Util.getResourceUri(mContext, getGlobalSearchIconResource()); } }
/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quicksearchbox.ui; import com.android.quicksearchbox.R; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; /** * A corpus in the corpus selection list. */ public class CorpusView extends RelativeLayout { private ImageView mIcon; private TextView mLabel; public CorpusView(Context context, AttributeSet attrs) { super(context, attrs); } public CorpusView(Context context) { super(context); } @Override protected void onFinishInflate() { super.onFinishInflate(); mIcon = (ImageView) findViewById(R.id.source_icon); mLabel = (TextView) findViewById(R.id.source_label); } public void setLabel(CharSequence label) { mLabel.setText(label); } public void setIcon(Drawable icon) { mIcon.setImageDrawable(icon); } }
这里就用到了接口编程的思想了:将一些规则抽象到CorpusViewFactory里面,那么通过CorpusViewFactory直接调用,不用管是如何实现的。真正的实现是在CorpusViewInflater。从代码看来若你想把ListView换成Gridview来表现,只需修改小部分代码:
1,SearchWidgetConfigActivity中:
@Override
protected void onStart() {
setAdapter(CorporaAdapter.createListAdapter(getViewFactory(), getCorpusRanker()));
super.onStart();
}
-->
@Override
protected void onStart() {
setAdapter(CorporaAdapter.createGridAdapter(getViewFactory(), getCorpusRanker()));
super.onStart();
}
2,ChoiceActivity中的choice_activity.xml
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2010 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/parentPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="9dip" android:paddingBottom="3dip" android:paddingLeft="3dip" android:paddingRight="1dip" > <LinearLayout android:id="@+id/topPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="54dip" android:background="@drawable/popup_top_dark" android:orientation="vertical"> <LinearLayout android:id="@+id/titlePanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" android:layout_marginTop="6dip" android:layout_marginBottom="9dip" android:layout_marginLeft="10dip" android:layout_marginRight="10dip" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:paddingTop="6dip" android:paddingRight="10dip" android:src="@drawable/ic_dialog_menu_generic" /> <TextView android:id="@+id/alertTitle" style="?android:attr/textAppearanceLarge" android:singleLine="false" android:maxLines="3" android:ellipsize="end" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="@null" android:background="@drawable/popup_bottom_bright" android:divider="@drawable/divider_horizontal_bright" android:scrollbars="vertical" /> </LinearLayout>中的ListView换成GridView就可以了。
从这个例子中,可以看出了接口编程思想的重要与方便性。也许我讲得不是很清楚很明白,语言表达能力有限,只可意会不可言传。呵呵...
今天才发现,其实QuickSearchBox也用了GridView来显示search 范围的,是在CorpusSelectionDialog。
ListView的效果可以看附件里面的Listview.png,GridView看Gridview.png
发表评论
-
ACTIVITY的LAUNCH MODE详解 SINGLETASK正解
2012-05-30 08:58 1110转自:http://www.cnblogs.com/xiaoQ ... -
android的一些开源项目
2011-12-06 14:08 1193转自:http://www.iteye.com/problem ... -
修改StatusBar
2011-10-10 10:27 1259转自:http://iserveandroid.blogspo ... -
单独一个应用程序换语言
2011-09-29 15:16 1448转自http://blog.csdn.net/sodino/a ... -
通过代码设置live wall paper
2011-09-02 09:17 25191. The code is: private Wall ... -
Android camera 默认显示黑白的问题
2011-06-08 16:18 2553转自:http://tassardge.blog. ... -
关于Activity切换动画——overridePendingTransition
2011-05-25 14:33 5776Activity的切换动画指的是从一个activity跳转到另 ... -
sendBroadcast和sendStickyBroadcast的区别
2011-04-28 13:39 9727我们平时最经常使用的是sendBroadcast,就是把一个I ... -
Settings.System.getInt获取Setting里面的一些设置
2011-04-28 10:29 7035好久没有更新博客了,其实这期间我都在研究android如何换皮 ... -
Service 启动Activity
2011-03-11 11:06 25185我想我们一般在Service里想启动Activity一定会这样 ... -
Android Windows
2011-03-11 09:45 2056转自:http://elsila.blog.163.com/b ... -
IntentService
2011-03-11 09:23 3450看android的源码可以发现很多很多有趣有用的代码,今天在看 ... -
AsyncQueryHandler
2011-03-02 15:10 6805在QuickContactBadge里面我 ... -
QuickContactBadge如何实现
2011-03-02 11:52 4922从前一篇,我们知道了如何使用了QuikcContactBadg ... -
如何使用QuickContactBadge
2011-03-02 09:34 4067参考文章:http://mobile.tutsplus.com ... -
QuickSearcheBox---SearchManager获取search列表
2011-02-25 14:05 1858在android 2.2之后加入了SearchManager, ... -
RemoteView总结
2011-02-23 11:15 2353我最初认识RemoteView是在AppWidget里面的,但 ... -
Google Search Widget, Google Search ap, Globe Search ap
2011-02-23 10:39 1294http://blog.csdn.net/Judy889/ar ... -
调用android system Search UI须注意的问题
2011-02-23 10:38 1548http://blog.csdn.net/Judy889/ar ...
相关推荐
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
ACM动态规划模板-区间修改线段树问题模板
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
本项目为Python语言开发的PersonRelationKnowledgeGraph设计源码,总计包含49个文件,涵盖19个.pyc字节码文件、12个.py源代码文件、8个.txt文本文件、3个.xml配置文件、3个.png图片文件、2个.md标记文件、1个.iml项目配置文件、1个.cfg配置文件。该源码库旨在构建一个用于表示和查询人物关系的知识图谱系统。
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
rtsp实时预览接口URL:/evo-apigw/admin/API/MTS/Video/StartVideo HLS、FLV、RTMP实时预览接口方式 :接口URL/evo-apigw/admin/API/video/stream/realtime 参数名 必选 类型 说明 data true string Json串 +channelId true string 视频通道编码 +streamType true string 码流类型:1=主码流, 2=辅码流,3=辅码流2 +type true string 协议类型:hls,hlss,flv,flvs,ws_flv,wss_flv,rtmp hls:http协议,m3u8格式,端口7086; hlss:https协议,m3u8格式,端口是7096; flv:http协议,flv格式,端口7886; flvs:https协议,flv格式,端口是7896; ws_flv:ws协议,flv格式,端口是7886; wss_flv:wss协议,flv格式,端口是7896; rtmp:rtmp协议,端口是1975;
Simulink永磁风机飞轮储能系统二次调频技术研究:频率特性分析与参数优化,Simulink永磁风机飞轮储能二次调频技术:系统频率特性详解及参数优化研究参考详实文献及两区域系统应用,simulink永磁风机飞轮储能二次调频,系统频率特性如下,可改变调频参数改善频率。 参考文献详细,两区域系统二次调频。 ,核心关键词: 1. Simulink 2. 永磁风机 3. 飞轮储能 4. 二次调频 5. 系统频率特性 6. 调频参数 7. 改善频率 8. 参考文献 9. 两区域系统 以上关键词用分号(;)分隔,结果为:Simulink;永磁风机;飞轮储能;二次调频;系统频率特性;调频参数;改善频率;参考文献;两区域系统。,基于Simulink的永磁风机与飞轮储能系统二次调频研究:频率特性及调频参数优化
MATLAB驱动的ASR防滑转模型:PID与对照控制算法对比,冰雪路面条件下滑移率与车速轮速对照展示,MATLAB驱动的ASR防滑转模型:PID与对照控制算法对比,冰雪路面条件下滑移率与车速轮速对照图展示,MATLAB驱动防滑转模型ASR模型 ASR模型驱动防滑转模型 ?牵引力控制系统模型 选择PID控制算法以及对照控制算法,共两种控制算法,可进行选择。 选择冰路面以及雪路面,共两种路面条件,可进行选择。 控制目标为滑移率0.2,出图显示车速以及轮速对照,出图显示车辆轮胎滑移率。 模型简单,仅供参考。 ,MATLAB; ASR模型; 防滑转模型; 牵引力控制系统模型; PID控制算法; 对照控制算法; 冰路面; 雪路面; 控制目标; 滑移率; 车速; 轮速。,MATLAB驱动的ASR模型:PID与对照算法在冰雪路面的滑移率控制研究
芯片失效分析方法介绍 -深入解析芯片故障原因及预防措施.pptx
4131_127989170.html
内容概要:本文提供了一个全面的PostgreSQL自动化部署解决方案,涵盖智能环境适应、多平台支持、内存与性能优化以及安全性加强等重要方面。首先介绍了脚本的功能及其调用方法,随后详细阐述了操作系统和依赖软件包的准备过程、配置项的自动生成机制,还包括对实例的安全性和监控功能的强化措施。部署指南给出了具体的命令操作指导,便于新手理解和执行。最后强调了该工具对于不同硬件条件和服务需求的有效应对能力,特别是针对云计算环境下应用的支持特点。 适合人群:对PostgreSQL集群运维有一定基础并渴望提高效率和安全性的数据库管理员及工程师。 使用场景及目标:本脚本能够帮助企业在大规模部署时减少人工介入时间,确保系统的稳定性与高性能,适用于各类需要稳定可靠的数据库解决方案的企业或机构,特别是在大数据量和高并发事务处理场合。 其他说明:文中还提及了一些高级功能如自动备份、流复制等设置步骤,使得该方案不仅可以快速上线而且能满足后续维护和发展阶段的要求。同时提到的技术性能数据也为用户评估其能否满足业务需求提供了直观参考。
房地产开发合同[示范文本].doc
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
工程技术承包合同[示范文本].doc
蓝桥杯开发赛【作品源码】
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
CVPR2023复现技术:多数据集验证下的YOLOX、YOLOv5及YOLOV7检测涨点助力器,CVPR2023复现实验助力检测涨点,验证了YOLOX、YOLOv5及YOLOV7在多个数据集上的有效性,cvpr2023复现,助力检测涨点,YOLOX YOLOv5 YOLOV7均有效,再多个数据集验证有效 ,cvpr2023复现; 助力检测涨点; YOLOX有效; YOLOv5有效; YOLOV7有效; 多数据集验证有效,CVPR2023复现成功:多模型检测涨点验证有效