#智能管家 #
#第二章:工具类封装与首页引导页开发
##一、log类的封装
public class L {
//开关
public static final boolean DEBUG = true;
//TAG
public static final String TAG = "SmartButler";
//五个等级 DIWE
public static void d(String text){
if(DEBUG){
Log.d(TAG,text);
}
}
public static void i(String text){
if(DEBUG){
Log.i(TAG,text);
}
}
public static void w(String text){
if(DEBUG){
Log.w(TAG,text);
}
}
public static void e(String text){
if(DEBUG){
Log.e(TAG,text);
}
}
}
##二、SharedPreferences的封装
public class ShareUtils {
public static final String NAME = "config";
//键 值
public static void putString(Context mContext,String key,String value){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().putString(key,value).commit();
}
//键 默认值
public static String getString(Context mContext,String key,String defValue){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
return sp.getString(key,defValue);
}
//键 值
public static void putInt(Context mContext,String key,int value){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().putInt(key,value).commit();
}
//键 默认值
public static int getInt(Context mContext,String key,int defValue){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
return sp.getInt(key,defValue);
}
//键 值
public static void putBoolean(Context mContext,String key,boolean value){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().putBoolean(key,value).commit();
}
//键 默认值
public static boolean getBoolean(Context mContext,String key,boolean defValue){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
return sp.getBoolean(key,defValue);
}
//刪除 单个
public static void deleShare(Context mContext,String key){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().remove(key).commit();
}
//刪除 全部
public static void deleAll(Context mContext){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().clear().commit();
}
}
##三、设置字体
public static void setFonts(Context context, TextView textView){
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fonts/FONT.TTF");
textView.setTypeface(typeface);
}
##四、启动界面的逻辑处理
public class SplashActivity extends Activity {
private TextView tv_splash;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case StaticClass.HANDLER_SPLASH:
if (isFirst()) {
//进入引导页面
Intent intent = new Intent(SplashActivity.this, GuideActivity.class);
startActivity(intent);
} else {
//进入主页面
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
}
finish();
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
tv_splash = (TextView) findViewById(R.id.tv_splash);
UtilTools.setFonts(SplashActivity.this, tv_splash);
handler.sendEmptyMessageDelayed(StaticClass.HANDLER_SPLASH, 2000);
}
/**
* 判断是否是第一次进入主页面
*
* @return
*/
private boolean isFirst() {
boolean isFirst = ShareUtils.getBoolean(this, StaticClass.SHARE_IS_FIRST, true);
if (isFirst) {
ShareUtils.putBoolean(this, StaticClass.SHARE_IS_FIRST, false);
return true;
} else {
return false;
}
}
}
##五、按钮的背景资源
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false">
<shape>
<solid android:color="#009ad6"/>
<corners android:radius="30dp"/>
</shape>
</item>
<item android:state_pressed="true">
<shape>
<solid android:color="#76becc"/>
<corners android:radius="30dp"/>
</shape>
</item>
</selector>
##六、引导界面的完成
###界面布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/mViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="15dp"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/point1"
android:layout_width="10dp"
android:layout_height="10dp"/>
<ImageView
android:id="@+id/point2"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"/>
<ImageView
android:id="@+id/point3"
android:layout_width="10dp"
android:layout_height="10dp"/>
</LinearLayout>
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="25dp"
android:layout_marginTop="25dp"
android:src="@drawable/black"/>
</RelativeLayout>
###界面逻辑处理
public class GuideActivity extends AppCompatActivity implements View.OnClickListener {
private ViewPager mViewPager;
//容器
private List<View> mList = new ArrayList<>();
private View view1, view2, view3;
//小圆点
private ImageView point1, point2, point3;
//跳过
private ImageView iv_back;
private TextView tv_pager_1,tv_pager_2,tv_pager_3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
initView();
}
//初始化View
private void initView() {
point1 = (ImageView) findViewById(R.id.point1);
point2 = (ImageView) findViewById(R.id.point2);
point3 = (ImageView) findViewById(R.id.point3);
iv_back= (ImageView) findViewById(R.id.iv_back);
iv_back.setOnClickListener(this);
//设置默认图片
setPointImg(true, false, false);
mViewPager = (ViewPager) findViewById(R.id.mViewPager);
view1 = View.inflate(this, R.layout.pager_item_one, null);
view2 = View.inflate(this, R.layout.pager_item_two, null);
view3 = View.inflate(this, R.layout.pager_item_three, null);
view3.findViewById(R.id.btn_start).setOnClickListener(this);
tv_pager_1 = (TextView) view1.findViewById(R.id.tv_pager_1);
tv_pager_2 = (TextView) view2.findViewById(R.id.tv_pager_2);
tv_pager_3 = (TextView) view3.findViewById(R.id.tv_pager_3);
UtilTools.setFont(this,tv_pager_1);
UtilTools.setFont(this,tv_pager_2);
UtilTools.setFont(this,tv_pager_3);
mList.add(view1);
mList.add(view2);
mList.add(view3);
//设置适配器
mViewPager.setAdapter(new GuideAdapter());
//监听ViewPager滑动
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//pager切换
@Override
public void onPageSelected(int position) {
L.i("position:" + position);
switch (position){
case 0:
setPointImg(true,false,false);
iv_back.setVisibility(View.VISIBLE);
break;
case 1:
setPointImg(false,true,false);
iv_back.setVisibility(View.VISIBLE);
break;
case 2:
setPointImg(false,false,true);
iv_back.setVisibility(View.GONE);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
case R.id.iv_back:
startActivity(new Intent(this, MainActivity.class));
finish();
break;
}
}
class GuideAdapter extends PagerAdapter {
@Override
public int getCount() {
return mList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
((ViewPager) container).addView(mList.get(position));
return mList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView(mList.get(position));
//super.destroyItem(container, position, object);
}
}
//设置小圆点的选中效果
private void setPointImg(boolean isCheck1, boolean isCheck2, boolean isCheck3) {
if (isCheck1) {
point1.setBackgroundResource(R.drawable.point_on);
} else {
point1.setBackgroundResource(R.drawable.point_off);
}
if (isCheck2) {
point2.setBackgroundResource(R.drawable.point_on);
} else {
point2.setBackgroundResource(R.drawable.point_off);
}
if (isCheck3) {
point3.setBackgroundResource(R.drawable.point_on);
} else {
point3.setBackgroundResource(R.drawable.point_off);
}
}
}
###拿第三个引导界面的布局为例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/guide_strong"/>
<TextView
android:layout_marginTop="10dp"
android:id="@+id/tv_pager_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="強大"
android:textSize="50sp"/>
</LinearLayout>
<Button
android:id="@+id/btn_start"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
android:background="@drawable/button_bg"
android:text="进入主页"
android:textColor="@android:color/white"/>
</RelativeLayout>
##七、Bugly的使用
作用集合所有的错误
官网——https://bugly.qq.com/v2/index
#第二章:工具类封装与首页引导页开发
##一、log类的封装
public class L {
//开关
public static final boolean DEBUG = true;
//TAG
public static final String TAG = "SmartButler";
//五个等级 DIWE
public static void d(String text){
if(DEBUG){
Log.d(TAG,text);
}
}
public static void i(String text){
if(DEBUG){
Log.i(TAG,text);
}
}
public static void w(String text){
if(DEBUG){
Log.w(TAG,text);
}
}
public static void e(String text){
if(DEBUG){
Log.e(TAG,text);
}
}
}
##二、SharedPreferences的封装
public class ShareUtils {
public static final String NAME = "config";
//键 值
public static void putString(Context mContext,String key,String value){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().putString(key,value).commit();
}
//键 默认值
public static String getString(Context mContext,String key,String defValue){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
return sp.getString(key,defValue);
}
//键 值
public static void putInt(Context mContext,String key,int value){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().putInt(key,value).commit();
}
//键 默认值
public static int getInt(Context mContext,String key,int defValue){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
return sp.getInt(key,defValue);
}
//键 值
public static void putBoolean(Context mContext,String key,boolean value){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().putBoolean(key,value).commit();
}
//键 默认值
public static boolean getBoolean(Context mContext,String key,boolean defValue){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
return sp.getBoolean(key,defValue);
}
//刪除 单个
public static void deleShare(Context mContext,String key){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().remove(key).commit();
}
//刪除 全部
public static void deleAll(Context mContext){
SharedPreferences sp = mContext.getSharedPreferences(NAME,Context.MODE_PRIVATE);
sp.edit().clear().commit();
}
}
##三、设置字体
public static void setFonts(Context context, TextView textView){
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fonts/FONT.TTF");
textView.setTypeface(typeface);
}
##四、启动界面的逻辑处理
public class SplashActivity extends Activity {
private TextView tv_splash;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case StaticClass.HANDLER_SPLASH:
if (isFirst()) {
//进入引导页面
Intent intent = new Intent(SplashActivity.this, GuideActivity.class);
startActivity(intent);
} else {
//进入主页面
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
}
finish();
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
tv_splash = (TextView) findViewById(R.id.tv_splash);
UtilTools.setFonts(SplashActivity.this, tv_splash);
handler.sendEmptyMessageDelayed(StaticClass.HANDLER_SPLASH, 2000);
}
/**
* 判断是否是第一次进入主页面
*
* @return
*/
private boolean isFirst() {
boolean isFirst = ShareUtils.getBoolean(this, StaticClass.SHARE_IS_FIRST, true);
if (isFirst) {
ShareUtils.putBoolean(this, StaticClass.SHARE_IS_FIRST, false);
return true;
} else {
return false;
}
}
}
##五、按钮的背景资源
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false">
<shape>
<solid android:color="#009ad6"/>
<corners android:radius="30dp"/>
</shape>
</item>
<item android:state_pressed="true">
<shape>
<solid android:color="#76becc"/>
<corners android:radius="30dp"/>
</shape>
</item>
</selector>
##六、引导界面的完成
###界面布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/mViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="15dp"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/point1"
android:layout_width="10dp"
android:layout_height="10dp"/>
<ImageView
android:id="@+id/point2"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"/>
<ImageView
android:id="@+id/point3"
android:layout_width="10dp"
android:layout_height="10dp"/>
</LinearLayout>
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="25dp"
android:layout_marginTop="25dp"
android:src="@drawable/black"/>
</RelativeLayout>
###界面逻辑处理
public class GuideActivity extends AppCompatActivity implements View.OnClickListener {
private ViewPager mViewPager;
//容器
private List<View> mList = new ArrayList<>();
private View view1, view2, view3;
//小圆点
private ImageView point1, point2, point3;
//跳过
private ImageView iv_back;
private TextView tv_pager_1,tv_pager_2,tv_pager_3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
initView();
}
//初始化View
private void initView() {
point1 = (ImageView) findViewById(R.id.point1);
point2 = (ImageView) findViewById(R.id.point2);
point3 = (ImageView) findViewById(R.id.point3);
iv_back= (ImageView) findViewById(R.id.iv_back);
iv_back.setOnClickListener(this);
//设置默认图片
setPointImg(true, false, false);
mViewPager = (ViewPager) findViewById(R.id.mViewPager);
view1 = View.inflate(this, R.layout.pager_item_one, null);
view2 = View.inflate(this, R.layout.pager_item_two, null);
view3 = View.inflate(this, R.layout.pager_item_three, null);
view3.findViewById(R.id.btn_start).setOnClickListener(this);
tv_pager_1 = (TextView) view1.findViewById(R.id.tv_pager_1);
tv_pager_2 = (TextView) view2.findViewById(R.id.tv_pager_2);
tv_pager_3 = (TextView) view3.findViewById(R.id.tv_pager_3);
UtilTools.setFont(this,tv_pager_1);
UtilTools.setFont(this,tv_pager_2);
UtilTools.setFont(this,tv_pager_3);
mList.add(view1);
mList.add(view2);
mList.add(view3);
//设置适配器
mViewPager.setAdapter(new GuideAdapter());
//监听ViewPager滑动
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//pager切换
@Override
public void onPageSelected(int position) {
L.i("position:" + position);
switch (position){
case 0:
setPointImg(true,false,false);
iv_back.setVisibility(View.VISIBLE);
break;
case 1:
setPointImg(false,true,false);
iv_back.setVisibility(View.VISIBLE);
break;
case 2:
setPointImg(false,false,true);
iv_back.setVisibility(View.GONE);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
case R.id.iv_back:
startActivity(new Intent(this, MainActivity.class));
finish();
break;
}
}
class GuideAdapter extends PagerAdapter {
@Override
public int getCount() {
return mList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
((ViewPager) container).addView(mList.get(position));
return mList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView(mList.get(position));
//super.destroyItem(container, position, object);
}
}
//设置小圆点的选中效果
private void setPointImg(boolean isCheck1, boolean isCheck2, boolean isCheck3) {
if (isCheck1) {
point1.setBackgroundResource(R.drawable.point_on);
} else {
point1.setBackgroundResource(R.drawable.point_off);
}
if (isCheck2) {
point2.setBackgroundResource(R.drawable.point_on);
} else {
point2.setBackgroundResource(R.drawable.point_off);
}
if (isCheck3) {
point3.setBackgroundResource(R.drawable.point_on);
} else {
point3.setBackgroundResource(R.drawable.point_off);
}
}
}
###拿第三个引导界面的布局为例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/guide_strong"/>
<TextView
android:layout_marginTop="10dp"
android:id="@+id/tv_pager_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="強大"
android:textSize="50sp"/>
</LinearLayout>
<Button
android:id="@+id/btn_start"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
android:background="@drawable/button_bg"
android:text="进入主页"
android:textColor="@android:color/white"/>
</RelativeLayout>
##七、Bugly的使用
作用集合所有的错误
官网——https://bugly.qq.com/v2/index