Android的原生控件并不支持播放GIF格式的圖片,如果想在A(yíng)ndroid中顯示一張GIF動(dòng)態(tài)圖片,可以利用 ImageView控件來(lái)完成,但是放進(jìn)去之后,你會(huì)發(fā)現(xiàn),ImageView它只會(huì)顯示這張圖片的第一幀,不會(huì)產(chǎn)生任何的動(dòng)畫(huà)效果。我們必須通過(guò)自定義控件的方式來(lái)實(shí)現(xiàn)ImageView播放GIF 圖片的功能。
首先我們來(lái)編寫(xiě)一個(gè)PowerImageView控件,讓它既能支持ImageView控件原生的所有功能,同時(shí)還可以播放GIF動(dòng)態(tài)圖片。
先新建一個(gè)項(xiàng)目PowerImageViewTest,這里使用Android 4.0+Eclipse。
由于是要自定義控件,會(huì)需要一些自定義的控件屬性,因此我們需要在values目錄下新建一個(gè)attrs.xml的文件,在這個(gè)文件中添加項(xiàng)目需要的自定義屬性。
這里我們目前暫時(shí)只需要一個(gè)自動(dòng)播放auto_play屬性,XML文件代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="PowerImageView">
<attr name="auto_play" format="boolean"></attr>
</declare-styleable>
</resources>
這個(gè)文件完成之后,下面我們來(lái)開(kāi)始編寫(xiě)主類(lèi)PowerImageView類(lèi),由于PowerImageView類(lèi)需要支持ImageView的所有功能,我們必須要讓PowerImageView繼承自ImageView,代碼如下:
public class PowerImageView extends ImageView implements OnClickListener {
/**
* 播放GIF動(dòng)畫(huà)的關(guān)鍵類(lèi)
*/
private Movie mMovie;
/**
* 開(kāi)始播放按鈕圖片
*/
private Bitmap mStartButton;
/**
* 記錄動(dòng)畫(huà)開(kāi)始的時(shí)間
*/
private long mMovieStart;
/**
* GIF圖片的寬度
*/
private int mImageWidth;
/**
* GIF圖片的高度
*/
private int mImageHeight;
/**
* 圖片是否正在播放
*/
private boolean isPlaying;
/**
* 是否允許自動(dòng)播放
*/
private boolean isAutoPlay;
/**
* PowerImageView構(gòu)造函數(shù)。
*
* @param context
*/
public PowerImageView(Context context) {
super(context);
}
/**
* PowerImageView構(gòu)造函數(shù)。
*
* @param context
*/
public PowerImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
/**
* PowerImageView構(gòu)造函數(shù),在這里完成所有必要的初始化操作。
*
* @param context
*/
public PowerImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a=context.obtainStyledAttributes(attrs, R.styleable.PowerImageView);
int resourceId=getResourceId(a, context, attrs);
if (resourceId !=0) {
// 當(dāng)資源id不等于0時(shí),就去獲取該資源的流
InputStream is=getResources().openRawResource(resourceId);
// 使用Movie類(lèi)對(duì)流進(jìn)行解碼
mMovie=Movie.decodeStream(is);
if (mMovie !=null) {
// 如果返回值不等于null,就說(shuō)明這是一個(gè)GIF圖片,下面獲取是否自動(dòng)播放的屬性
isAutoPlay=a.getBoolean(R.styleable.PowerImageView_auto_play, false);
Bitmap bitmap=BitmapFactory.decodeStream(is);
mImageWidth=bitmap.getWidth();
mImageHeight=bitmap.getHeight();
bitmap.recycle();
if (!isAutoPlay) {
// 當(dāng)不允許自動(dòng)播放的時(shí)候,得到開(kāi)始播放按鈕的圖片,并注冊(cè)點(diǎn)擊事件
mStartButton=BitmapFactory.decodeResource(getResources(),R.drawable.start_play);
setOnClickListener(this);
}
}
}
}
@Override
public void onClick(View v) {
if (v.getId()==getId()) {
// 當(dāng)用戶(hù)點(diǎn)擊圖片時(shí),開(kāi)始播放GIF動(dòng)畫(huà)
isPlaying=true;
invalidate();
}
}
@Override
protected void onDraw(Canvas canvas) {
if (mMovie==null) {
// mMovie等于null,說(shuō)明是張普通的圖片,則直接調(diào)用父類(lèi)的onDraw()方法
super.onDraw(canvas);
} else {
// mMovie不等于null,說(shuō)明是張GIF圖片
if (isAutoPlay) {
// 如果允許自動(dòng)播放,就調(diào)用playMovie()方法播放GIF動(dòng)畫(huà)
playMovie(canvas);
invalidate();
} else {
// 不允許自動(dòng)播放時(shí),判斷當(dāng)前圖片是否正在播放
if (isPlaying) {
// 正在播放就繼續(xù)調(diào)用playMovie()方法,一直到動(dòng)畫(huà)播放結(jié)束為止
if (playMovie(canvas)) {
isPlaying=false;
}
invalidate();
} else {
// 還沒(méi)開(kāi)始播放就只繪制GIF圖片的第一幀,并繪制一個(gè)開(kāi)始按鈕
mMovie.setTime(0);
mMovie.draw(canvas, 0, 0);
int offsetW=(mImageWidth – mStartButton.getWidth()) / 2;
int offsetH=(mImageHeight – mStartButton.getHeight()) / 2;
canvas.drawBitmap(mStartButton, offsetW, offsetH, null);
}
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mMovie !=null) {
// 如果是GIF圖片則重寫(xiě)設(shè)定PowerImageView的大小
setMeasuredDimension(mImageWidth, mImageHeight);
}
}
/**
* 開(kāi)始播放GIF動(dòng)畫(huà),播放完成返回true,未完成返回false。
*
* @param canvas
* @return 播放完成返回true,未完成返回false。
*/
private boolean playMovie(Canvas canvas) {
long now=SystemClock.uptimeMillis();
if (mMovieStart==0) {
mMovieStart=now;
}
int duration=mMovie.duration();
if (duration==0) {
duration=1000;
}
int relTime=(int) ((now – mMovieStart) % duration);
mMovie.setTime(relTime);
mMovie.draw(canvas, 0, 0);
if ((now – mMovieStart) >=duration) {
mMovieStart=0;
return true;
}
return false;
}
/**
* 通過(guò)Java反射,獲取到src指定圖片資源所對(duì)應(yīng)的id。
*
* @param a
* @param context
* @param attrs
* @return 返回布局文件中指定圖片資源所對(duì)應(yīng)的id,沒(méi)有指定任何圖片資源就返回0。
*/
private int getResourceId(TypedArray a, Context context, AttributeSet attrs) {
try {
Field field=TypedArray.class.getDeclaredField("mValue");
field.setAccessible(true);
TypedValue typedValueObject=(TypedValue) field.get(a);
return typedValueObject.resourceId;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (a !=null) {
a.recycle();
}
}
return 0;
}
}
這個(gè)類(lèi)的代碼注釋已經(jīng)非常詳細(xì)了,我再來(lái)簡(jiǎn)單地解釋一下。可以看到,我們重寫(xiě)了ImageView中所有的構(gòu)建函數(shù),使得 PowerImageView的用法可以和ImageView完全相同。在構(gòu)造函數(shù)中,則是對(duì)所有必要的數(shù)據(jù)進(jìn)行了初始化操作。首先,我們調(diào)用了 getResourceId()方法去獲取圖片資源對(duì)應(yīng)的id值,在getResourceId()方法內(nèi)部是通過(guò)Java的反射機(jī)制來(lái)進(jìn)行獲取的。得到了圖片資源的id后,我們將它轉(zhuǎn)換成InputStream,然后傳入到Movie.decodeStream()方法中以解碼出Movie對(duì)象。如果得到的Movie對(duì)象等于null,說(shuō)明這是一張普通的圖片資源,就不再進(jìn)行任何特殊處理,因?yàn)楦割?lèi)ImageView都幫我們處理好了。如果得到的 Movie對(duì)象不等于null,則說(shuō)明這是一張GIF圖片,接著就要去獲取是否允許自動(dòng)播放、圖片的寬高等屬性的值。如果不允許自動(dòng)播放,還要給播放按鈕 注冊(cè)點(diǎn)擊事件,默認(rèn)是不允許自動(dòng)播放的。
接下來(lái)會(huì)進(jìn)入到onMeasure()方法中。在這個(gè)方法中我們進(jìn)行判斷,如果這是一張GIF圖片,則需要將PowerImageView的寬高重定義,使得控件的大小剛好可以放得下這張GIF圖片。
再往后就會(huì)進(jìn)入到onDraw()方法中。在這個(gè)方法里同樣先判斷當(dāng)前是一張普通的圖片還是GIF圖片,如果是普通的圖片就直接調(diào)用 super.onDraw()方法交給ImageView去處理就好了。如果是GIF圖片,則先判斷該圖是否允許自動(dòng)播放,允許的話(huà)就調(diào)用 playMovie()方法去播放GIF圖片就好,不允許的話(huà)則會(huì)先在PowerImageView中繪制該GIF圖片的第一幀,并在圖片上繪制一個(gè)播放 按鈕,當(dāng)用戶(hù)點(diǎn)擊了播放按鈕時(shí),再去調(diào)用playMovie()方法去播放GIF圖片。
下面我們來(lái)看看playMovie()方法中是怎樣播放GIF圖片的吧??梢钥吹?,首先會(huì)對(duì)動(dòng)畫(huà)開(kāi)始的時(shí)間做下記錄,然后對(duì)動(dòng)畫(huà)持續(xù)的時(shí)間做下記 錄,接著使用當(dāng)前的時(shí)間減去動(dòng)畫(huà)開(kāi)始的時(shí)間,得到的時(shí)間就是此時(shí)PowerImageView應(yīng)該顯示的那一幀,然后借助Movie對(duì)象將這一幀繪制到屏 幕上即可。之后每次調(diào)用playMovie()方法都會(huì)繪制一幀圖片,連貫起來(lái)也就形成了GIF動(dòng)畫(huà)。注意,這個(gè)方法是有返回值的,如果當(dāng)前時(shí)間減去動(dòng)畫(huà) 開(kāi)始時(shí)間大于了動(dòng)畫(huà)持續(xù)時(shí)間,那就說(shuō)明動(dòng)畫(huà)播放完成了,返回true,否則返回false。
完成了PowerImageView的編寫(xiě),下面我們就來(lái)看一看如何使用它吧,其實(shí)非常簡(jiǎn)單,打開(kāi)或新建activity_main.xml,代碼如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.powerimageviewtest.PowerImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/anim"
/>
</RelativeLayout>
可以看到,PowerImageView的用法和ImageView幾乎完全一樣,使用android:src屬性來(lái)指定一張圖片即可,這里指定的anim就是一張GIF圖片。然后我們讓PowerImageView在布局里居中顯示MainActivity中的代碼都是自動(dòng)生成的,這里就不再貼出來(lái)了。在A(yíng)ndroidManifest.xml中還有一點(diǎn)需要注意,有些4.0 以上系統(tǒng)的手機(jī)啟動(dòng)了硬件加速功能之后會(huì)導(dǎo)致GIF動(dòng)畫(huà)播放不出來(lái),因此我們需要在A(yíng)ndroidManifest.xml中去禁用硬件加速功能,可以通過(guò)指定android:hardwareAccelerated屬性來(lái)完成,代碼如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.powerimageviewtest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:hardwareAccelerated="false"
>
<activity
android:name="com.example.powerimageviewtest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
現(xiàn)在可以來(lái)運(yùn)行一下代碼了,一打開(kāi)程序你就會(huì)看到GIF圖片的第一幀,點(diǎn)擊圖片之后就可以播放GIF動(dòng)畫(huà)了。
然后我們還可以通過(guò)修改activity_main.xml中的代碼,給它加上允許自動(dòng)播放的屬性,代碼如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:attr="http://schemas.android.com/apk/res/com.example.powerimageviewtest"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.powerimageviewtest.PowerImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/anim"
attr:auto_play="true"
/>
</RelativeLayout>
這里使用了剛才我們自定義的屬性,通過(guò)attr:auto_play來(lái)啟用和禁用自動(dòng)播放功能?,F(xiàn)在將auto_play屬性指定成true后,PowerImageView上就不會(huì)再顯示一個(gè)播放按鈕,而是會(huì)循環(huán)地自動(dòng)播放動(dòng)畫(huà)。不僅如此,PowerImageView還繼承了ImageView原生的所有功能,只要指定的不是GIF圖 片,PowerImageView表現(xiàn)的結(jié)果就和ImageView完全一致,現(xiàn)在我們來(lái)放一張普通的PNG圖片,修改 activity_main.xml中的代碼,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.powerimageviewtest.PowerImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/myphoto"
/>
</RelativeLayout>
這里在src屬性里面指定了一張名字為myphoto的PNG圖片,圖片在布局正中央顯示出來(lái)了,正是普通ImageView所具備的功能。我們還可以在PowerImageView中指定android:scaleType等屬性,用法和原生的ImageView完全一樣。
]]>1. 基于Spring MVC的圖片上傳應(yīng)用

Spring MVC是一種基于Java的應(yīng)用程序開(kāi)發(fā)框架,非常適合用于開(kāi)發(fā)Web應(yīng)用程序。在本實(shí)例中,我們將利用Spring MVC框架和AJAX技術(shù)實(shí)現(xiàn)一個(gè)比較基礎(chǔ)的圖片上傳功能。
在圖片上傳的過(guò)程中,我們可以使用Spring的MultipartResolver將圖片文件解析成多部分對(duì)象,然后通過(guò)交互式AJAX技術(shù)將上傳進(jìn)度展示給用戶(hù),在用戶(hù)完成上傳之后再將文件保存到后臺(tái)服務(wù)器上。
首先,我們需要在Spring MVC的配置文件中開(kāi)啟上傳功能:
“`
“`
接著,需要在前端頁(yè)面進(jìn)行文件上傳表單的編寫(xiě):
“`
“`
最后,定義后臺(tái)上傳函數(shù),將文件保存到服務(wù)器:
“`
@RequestMapping(value = “upload.do”, method = RequestMethod.POST)
@ResponseBody
public String upload(HttpServletRequest request) throws IOException {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile(“file”);
if (file != null) {
String contentType = file.getContentType();
String[] allowedTypes = {“image/jpeg”, “image/png”, “image/gif”};
boolean allowed = Arrays.asList(allowedTypes).contains(contentType);
if (allowed) {
String filename = file.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf(“.”));
Random random = new Random();
String newFileName = System.currentTimeMillis() + “” + random.nextInt(1000) + suffix;
File newFile = new File(request.getSession().getServletContext().getRealPath(“/upload”) + “/” + newFileName);
FileUtils.copyInputStreamToFile(file.getInputStream(), newFile);
return “ok”;
}
}
return “error”;
}
“`
2. 基于Spring Boot的簡(jiǎn)易博客系統(tǒng)
Spring Boot是一款基于Spring框架的快速應(yīng)用開(kāi)發(fā)框架,可以有效降低初期開(kāi)發(fā)的復(fù)雜度。在本實(shí)例中,我們將利用Spring Boot搭建一個(gè)簡(jiǎn)易的個(gè)人博客系統(tǒng)。
在博客系統(tǒng)的開(kāi)發(fā)過(guò)程中,我們需要考慮博客的發(fā)布、修改、刪除、查詢(xún)等功能。而在Spring Boot中使用MyBatis作為ORM框架,可以極大地簡(jiǎn)化我們的開(kāi)發(fā)過(guò)程。
首先,我們需要在配置文件中進(jìn)行數(shù)據(jù)庫(kù)的配置:
“`
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/blogdb
spring.datasource.username=root
spring.datasource.password=****
“`
接著,定義MyBatis的實(shí)體類(lèi)和Mapper文件:
“`
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Blog {
private int id;
private String title;
private String content;
private Date createTime;
}
@Mapper
@Repository
public interface BlogMapper {
List selectBlogs();
Blog selectBlogById(int id);
int insertBlog(Blog blog);
int updateBlog(Blog blog);
int deleteBlogById(int id);
}
“`
最后,在Controller中編寫(xiě)路由函數(shù),將博客系統(tǒng)的各種功能進(jìn)行整合:
“`
@Controller
public class BlogController {
@Autowired
private BlogMapper blogMapper;
@RequestMapping(value = “/”, method = RequestMethod.GET)
public ModelAndView index() {
ModelAndView mv = new ModelAndView(“index”);
List blogs = blogMapper.selectBlogs();
mv.addObject(“blogs”, blogs);
return mv;
}
@RequestMapping(value = “/blog/{id}”, method = RequestMethod.GET)
public ModelAndView blog(@PathVariable(name = “id”) int id) {
ModelAndView mv = new ModelAndView(“blog”);
Blog blog = blogMapper.selectBlogById(id);
mv.addObject(“blog”, blog);
return mv;
}
//…其他路由函數(shù)
}
“`
以上便是兩個(gè)基于java項(xiàng)目開(kāi)發(fā)實(shí)例的例子,希望可以為讀者們提供一些有價(jià)值的參考!
]]>
三菱伺服馬達(dá)
1.設(shè)置定位模塊基本參數(shù)
在智能功能模塊中(QD77MS系列)根據(jù)機(jī)械配置不同設(shè)置好相應(yīng)的參數(shù)
基本參數(shù)設(shè)置
2.設(shè)置原點(diǎn)回歸基本參數(shù)
根據(jù)實(shí)際情況選擇:近點(diǎn)DOG型、數(shù)據(jù)設(shè)定型、計(jì)數(shù)型等原點(diǎn)回歸方式。
原點(diǎn)回歸方式
3.設(shè)置伺服放大器參數(shù)
設(shè)置絕對(duì)位置系統(tǒng)、相對(duì)位置系統(tǒng)、自動(dòng)調(diào)諧相應(yīng)等參數(shù),也可以選擇“一鍵式調(diào)整”進(jìn)行相關(guān)的參數(shù)設(shè)置。
伺服放大器參數(shù)設(shè)置
4.伺服外部信號(hào)程序
包含伺服馬達(dá)電源信號(hào)、伺服馬達(dá)剎車(chē)信號(hào)等外圍接入信號(hào)。
外部信號(hào)程序
5.原點(diǎn)回歸程序
根據(jù)不同的原點(diǎn)回歸方式,進(jìn)行原點(diǎn)回歸。
原點(diǎn)回歸程序
6.手動(dòng)程序
JOG+、JOG-、伺服停止、伺服報(bào)警復(fù)位等與PLC CPU 輸入/輸出信號(hào)。
手動(dòng)程序
7.當(dāng)前參數(shù)反饋&控制參數(shù)寫(xiě)入程序
①.反饋參數(shù):
伺服馬達(dá)的當(dāng)前位置、報(bào)警代碼、當(dāng)前速度等。
當(dāng)前狀態(tài)反饋
②.控制參數(shù):
寫(xiě)入JOG速度、伺服定位速度等相關(guān)的控制參數(shù)。
控制參數(shù)
8.伺服定位啟動(dòng)程序
包含伺服定位起始編號(hào)、定位地址、定位啟動(dòng)信號(hào)。
定位啟動(dòng)參數(shù)寫(xiě)入
定位啟動(dòng)
9.試運(yùn)行
按照以上的步驟,就可以試運(yùn)行伺服馬達(dá)了。
關(guān)注我,學(xué)習(xí)更多電氣知識(shí)!
附:緩沖存儲(chǔ)器地址分配表
1.員工裂變
2.會(huì)員裂變
3.分銷(xiāo)裂變
4.以店招店的店面裂變
5.合伙人裂變
我告訴大家從今天開(kāi)始,特別是實(shí)體店的小老板,你們一定要把你們的員工當(dāng)成自己的朋友,不要瞧不起人家,要跟他商量商量分錢(qián)制度這件事情。今天我就用一個(gè)小案例來(lái)給大家解析一下這幾種裂變模式。
有一家實(shí)體店的小老板,他每天都在招員工,招員工的過(guò)程當(dāng)中,他發(fā)現(xiàn)員工經(jīng)常是為了找借口不斷的說(shuō)謊話(huà),他也感覺(jué)到很累啊,他說(shuō)我給你工資你給我干活我們不是冤家,那么他會(huì)不斷給員工表達(dá)一種觀(guān)點(diǎn),你早上來(lái)得晚和晚上的走的早其實(shí)沒(méi)有關(guān)系,我們都要賺錢(qián)吧,就是說(shuō)人話(huà),如果他聽(tīng)不懂人話(huà)你就別用他了。
我們怎么賺錢(qián)的你得告訴員工一個(gè)方向,如果沒(méi)有方向,他就覺(jué)得你賠跟賺跟他沒(méi)有任何關(guān)系。所以你首先在能力上,在思維上,在方法上,你得征服他,最起碼你能做他的一個(gè)老師。你不用聊的太多,他也不懂,聊個(gè)一招兩招,你說(shuō)我線(xiàn)上應(yīng)該怎么做,線(xiàn)下應(yīng)該怎么做,最起碼咱們比別人店要強(qiáng)。那么他認(rèn)同你了,你再跟他聊我們店面正在發(fā)生什么,我們店面正在面臨著什么,而不要聊什么你今天怎么來(lái)晚了呢?你怎么又早走了呢?最近業(yè)績(jī)?cè)趺床缓茫銓?duì)人家服務(wù)態(tài)度不好。不能這樣聊,你本來(lái)就沒(méi)有人,你管什么?我們應(yīng)該理解他,配合他,協(xié)同他,讓他跟你站在同一個(gè)立場(chǎng)上,相當(dāng)于你把他變成閨蜜,你把他變成哥們,就是利益上有關(guān)聯(lián),這是一個(gè)基礎(chǔ)。
我告訴大家,實(shí)體店面不需要能力太強(qiáng)的人,因?yàn)樗恍枰_(kāi)創(chuàng)性的工作,他只需要把你交給他的事情辦好就行了,你應(yīng)該要聽(tīng)得懂人話(huà)的人,就是那些有過(guò)生活經(jīng)歷的人,因?yàn)樗苈?tīng)出懂人話(huà),所以千萬(wàn)不要小瞧那些生完孩子的寶媽?zhuān)驗(yàn)樗齻冎郎畹钠D辛,她們懂得生活的磨難,她可能沒(méi)有文化,但她真的能夠聽(tīng)得進(jìn)人話(huà)。不要用那些表面上很聰明的像百靈鳥(niǎo)的那種,生活看似沒(méi)有壓力,事實(shí)上是不負(fù)責(zé)任的,比如說(shuō)那幫小女孩,大姐長(zhǎng)大姐短的,看起來(lái)挺有能力的那種,但沒(méi)用的,因?yàn)樗筒蛔。粫?huì)跟你思考一條線(xiàn)的,因?yàn)槟銈冎g的有代溝,所以我們首先要過(guò)濾員工,把這類(lèi)的員工過(guò)濾出來(lái),一定要把員工變成跟我們同頻的人。
那么第2件事情我們要跟員工說(shuō),現(xiàn)在都是合伙創(chuàng)業(yè),那么你就把這家店當(dāng)成自己的店,你看我的成本你都知道啊,姐都跟你說(shuō)了,我們現(xiàn)在的業(yè)績(jī)和業(yè)務(wù),每天收益是多少你也知道了,還有我們的房租成本你也都知道了,我就把這個(gè)底兒全交給你,讓你明白,然后我是這樣定的,你看行不行,就是說(shuō)你有時(shí)間你就來(lái)我這店,沒(méi)有時(shí)間你可以在家,反正現(xiàn)在線(xiàn)上啥的咱們都方便,你把它當(dāng)成自己的店,你就是我的合伙人,由你所產(chǎn)生的收益,你占凈利潤(rùn)的70%,我占30%,因?yàn)槲疫€有一些成本,其實(shí)我扣出去也沒(méi)啥了。其實(shí)我告訴大家,實(shí)體店的員工裂變就是這樣的,你給那些員工藏著掖著的人家沒(méi)有人搭理你,天天喊雞血打口號(hào)沒(méi)用的,你就要跟他實(shí)實(shí)在在的聊。
這個(gè)思路大家都說(shuō)是好的,但是員工他不會(huì)做呀,第一社群不會(huì)做,第二不會(huì)做社交化,第三不會(huì)裂變。這個(gè)時(shí)候才能體現(xiàn)你的能力,如果你好好的看了我的文章,那這些都不是問(wèn)題!你每天可以大量的招,而且能夠招50個(gè)員工,全是做的兼職型的給你創(chuàng)業(yè),這不就是員工的裂變嗎?
我們?cè)賮?lái)強(qiáng)化一下會(huì)員裂變,會(huì)員裂變第1件事情是引流,然后一定是一次小成交,然后變成大成交的一個(gè)過(guò)程。大成交的過(guò)程就把它放到我們的會(huì)員管理系統(tǒng)當(dāng)中,那這個(gè)會(huì)員分為幾個(gè)級(jí)別,比如說(shuō)你只要小程序注冊(cè)了就是會(huì)員,然后再消費(fèi)的話(huà)就升級(jí),老會(huì)員帶新會(huì)員有獎(jiǎng)勵(lì),會(huì)員和會(huì)員之間裂變,然后會(huì)員還包含了產(chǎn)品的重購(gòu),這就是一個(gè)會(huì)員體系。
那分銷(xiāo)就是水平裂變,比如小程序注冊(cè)了就自動(dòng)成為會(huì)員,然后消費(fèi)198升級(jí)高級(jí)會(huì)員,還有叫做尊享會(huì)員,那么尊享會(huì)員就具有分銷(xiāo)功能了,免費(fèi)會(huì)員的話(huà)它沒(méi)有分銷(xiāo)功能,這個(gè)你們?cè)诤笈_(tái)自己來(lái)設(shè)置。正常來(lái)說(shuō)第一個(gè)級(jí)別一定是免費(fèi),第二個(gè)級(jí)別是個(gè)很小的門(mén)檻。如果分銷(xiāo)賺錢(qián)了那就可以成為合伙人了,以店招店就是做加盟店,這些以后都能講到。
]]>