Android 之 BaseActivity1
来源:互联网 发布:做淘宝售后客服辛苦吗 编辑:程序博客网 时间:2024/06/05 09:22
1.取得手机屏幕大小DisplayMetrics
// 取得手机屏幕大小 DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); mScreenDensity = displayMetrics.density; mScreenHeight = displayMetrics.heightPixels; mScreenWidth = displayMetrics.widthPixels;
package com.huading.myvolley.widget;import android.annotation.TargetApi;import android.app.Activity;import android.content.Context;import android.os.Build;import android.support.v4.content.ContextCompat;import android.view.View;import android.view.ViewGroup;import com.huading.myvolley.R;/** * Translucent Bars Utils * * @author LHZ * @date 16/8/8. */public class StatusBarCompat { private static final int INVALID_VAL = -1; //Get alpha color static int calculateStatusBarColor(int color, int alpha) { float a = 1 - alpha / 255f; int red = color >> 16 & 0xff; int green = color >> 8 & 0xff; int blue = color & 0xff; red = (int) (red * a + 0.5); green = (int) (green * a + 0.5); blue = (int) (blue * a + 0.5); return 0xff << 24 | red << 16 | green << 8 | blue; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static View compat(Activity activity, int statusColor) { int color = ContextCompat.getColor(activity, R.color.colorPrimaryDark); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (statusColor != INVALID_VAL) { color = statusColor; } activity.getWindow().setStatusBarColor(color); return null; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content); if (statusColor != INVALID_VAL) { color = statusColor; } View statusBarView = contentView.getChildAt(0); if (statusBarView != null && statusBarView.getMeasuredHeight() == getStatusBarHeight(activity)) { statusBarView.setBackgroundColor(color); return statusBarView; } statusBarView = new View(activity); ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)); statusBarView.setBackgroundColor(color); contentView.addView(statusBarView, lp); return statusBarView; } return null; } public static void compat(Activity activity) { compat(activity, INVALID_VAL); } // 获取状态栏高度 public static int getStatusBarHeight(Context context) { int result = 0; int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; }}
3.全透明状态栏
// 全透明状态栏 protected void transparent19and20() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明底部导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } }
4.兼容4.4
新建values-v19
<resources> <style name="AppTheme" parent="AppTheme.Base"> <item name="android:windowTranslucentStatus">true</item> </style></resources>
5.颜色值
<?xml version="1.0" encoding="utf-8"?><resources> <color name="colorPrimary">#FF03A9F4</color> <color name="colorPrimaryDark">#FF0288D1</color> <color name="colorAccent">#FF4081</color> <color name="transparent">#00000000</color> <!--透明 --> <color name="white">#FFFFFF</color> <!--白色 --> <color name="black">#000000</color> <!--黑色 --> <color name="background">#F2F2F2</color> <!--背景色 --> <color name="navigationColor">#F8F8F8</color> <!--状态导航栏背景色--> <color name="dividerColor">#EEEEEE</color> <!--二级分割线--> <color name="divider">#DDDDDD</color> <!--分割线--> <color name="titleColor">#999999</color> <!--导航文字--> <color name="textColor">#333333</color> <!--文字颜色--> <color name="text">#666666</color> <!--次文字--> <color name="blueColor">#00AAFF</color> <!--标准蓝--> <color name="orangeColor">#FFAB19</color> <!--标准橙--> <color name="orange">#FB7E00</color> <!--标准深橙--> <color name="greenColor">#5ED125</color> <!--标准绿--> <color name="redColor">#FF4343</color> <!--标准红--> <color name="pinkColor">#DE1E7C</color> <!--标准粉红--></resources>6.标题栏
<?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (c) 2015 [1076559197@qq.com | tchen0707@gmail.com] ~ ~ 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. --><merge 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.support.v7.widget.Toolbar android:id="@+id/common_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/></merge>7.加载进度条
工具类LoadingDialog
package com.huading.myvolley.widget;import android.app.Dialog;import android.content.Context;import android.view.Gravity;import android.view.animation.Animation;import android.widget.TextView;import com.huading.myvolley.R;public class LoadingDialog extends Dialog { private static LoadingDialog loadingDialog = null; public Animation animation; public LoadingDialog(Context context) { super(context); } public LoadingDialog(Context context, int theme) { super(context, theme); } public static LoadingDialog createDialog(Context context) { loadingDialog = new LoadingDialog(context, R.style.CustomProgressDialog); loadingDialog.setContentView(R.layout.loading_dialog); loadingDialog.getWindow().getAttributes().gravity = Gravity.CENTER; return loadingDialog; } /** * [Summary] setMessage 提示内容 * * @param strMessage * @return */ public LoadingDialog setMessage(String strMessage) { TextView tvMsg = (TextView) loadingDialog.findViewById(R.id.progressBar_text); if (tvMsg != null) { tvMsg.setText(strMessage); } return loadingDialog; }}
进度条主题样式R.style.CustomProgressDialog
<resources> <style name="AppTheme" parent="AppTheme.Base"></style> <!-- Base application theme. --> <style name="AppTheme.Base" parent="Theme.AppCompat.Light"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <!--标题栏--> <item name="colorPrimaryDark">@color/colorPrimaryDark</item><!--状态栏--> <item name="colorAccent">@color/colorAccent</item> <!--隐藏ActionBar--> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> <!--进度条样式--> <style name="CustomProgressDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowIsTranslucent">false</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:backgroundDimEnabled">false</item> </style> </resources>进度条布局R.layout.loading_dialog
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="120dp" xmlns:app="http://schemas.android.com/apk/res-auto" android:alpha="0.8" android:background="@android:color/transparent" android:gravity="center" android:orientation="vertical"> <com.huading.baselhz.widget.load.CircleLoadingView android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" app:progress_color="@color/pinkColor" /> <TextView android:id="@+id/progressBar_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:textColor="@color/pinkColor" android:text="正在加载..." /></LinearLayout>BaseProgressController
/** * Created by LHZ on 2016/4/29. */public abstract class BaseProgressController { private View mTarget; private List<Animator> mAnimators; public void setTarget(View target) { this.mTarget = target; } public View getTarget() { return mTarget; } public int getWidth() { return mTarget.getWidth(); } public int getHeight() { return mTarget.getHeight(); } public void postInvalidate() { mTarget.postInvalidate(); } /** * draw * * @param canvas canvas * @param paint paint */ public abstract void draw(Canvas canvas, Paint paint); public abstract List<Animator> createAnimation(); public void initAnimation() { mAnimators = createAnimation(); } public void setAnimationStatus(AnimStatus animStatus) { if (mAnimators == null) { return; } int count = mAnimators.size(); for (int i = 0; i < count; i++) { Animator animator = mAnimators.get(i); boolean isRunning = animator.isRunning(); switch (animStatus) { case START: if (!isRunning) { animator.start(); } break; case END: if (isRunning) { animator.end(); } break; case CANCEL: if (isRunning) { animator.cancel(); } break; } } } public enum AnimStatus { START, END, CANCEL }}CircleProgress
/** *Created by LHZ on 2016/4/29. */public class CircleProgress extends BaseProgressController { public static final float SCALE=1.0f; public static final int ALPHA=255; float[] scaleFloats=new float[]{SCALE, SCALE, SCALE, SCALE, SCALE, SCALE, SCALE, SCALE}; int[] alphas=new int[]{ALPHA, ALPHA, ALPHA, ALPHA, ALPHA, ALPHA, ALPHA, ALPHA}; @Override public void draw(Canvas canvas, Paint paint) { float radius=getWidth()/10; for (int i = 0; i < 8; i++) { canvas.save(); Point point=circleAt(getWidth(),getHeight(),getWidth()/2-radius,i*(Math.PI/4)); canvas.translate(point.x,point.y); canvas.scale(scaleFloats[i],scaleFloats[i]); paint.setAlpha(alphas[i]); canvas.drawCircle(0,0,radius,paint); canvas.restore(); } } /** * 圆O的圆心为(a,b),半径为R,点A与到X轴的为角α. *则点A的坐标为(a+R*cosα,b+R*sinα) * @param width * @param height * @param radius * @param angle * @return */ Point circleAt(int width,int height,float radius,double angle){ float x= (float) (width/2+radius*(Math.cos(angle))); float y= (float) (height/2+radius*(Math.sin(angle))); return new Point(x,y); } @Override public List<Animator> createAnimation() { List<Animator> animators=new ArrayList<>(); int[] delays= {0, 120, 240, 360, 480, 600, 720, 780, 840}; for (int i = 0; i < 8; i++) { final int index=i; ValueAnimator scaleAnim=ValueAnimator.ofFloat(1,0.4f,1); scaleAnim.setDuration(1000); scaleAnim.setRepeatCount(-1); scaleAnim.setStartDelay(delays[i]); scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { scaleFloats[index] = (float) animation.getAnimatedValue(); postInvalidate(); } }); scaleAnim.start(); ValueAnimator alphaAnim=ValueAnimator.ofInt(255, 77, 255); alphaAnim.setDuration(1000); alphaAnim.setRepeatCount(-1); alphaAnim.setStartDelay(delays[i]); alphaAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { alphas[index] = (int) animation.getAnimatedValue(); postInvalidate(); } }); alphaAnim.start(); animators.add(scaleAnim); animators.add(alphaAnim); } return animators; } final class Point{ public float x; public float y; public Point(float x, float y){ this.x=x; this.y=y; } }}
新建attrs
<!--进度条样式--> <declare-styleable name="CircleLoadingView"> <attr name="progress_color" format="color" /> </declare-styleable>
8.activity管理栈
package com.huading.myvolley.utils;import android.app.Activity;import java.util.Stack;/** * Created by LHZ on 2017/3/1. * Activity管理栈 */public class AppManager { private static Stack<Activity> activityStack; public volatile static AppManager instance = new AppManager(); private AppManager() { activityStack = new Stack<>(); } /** * 添加Activity到堆栈 */ public void addActivity(Activity activity) { activityStack.add(activity); } /** * 获取当前Activity(堆栈中最后一个压入的) */ public Activity currentActivity() { try { Activity activity = activityStack.lastElement(); return activity; } catch (Exception e) { return null; } } /** * 返回到指定类名的activity * * @param cls */ public void returnToActivity(Class<?> cls) { while (activityStack.size() != 0) if (activityStack.peek().getClass() == cls) { break; } else { finishActivity(activityStack.peek()); } } /** * 结束当前Activity(堆栈中最后一个压入的) */ public void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); } } /** * 移除指定的Activity */ public void removeActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); } } /** * 结束指定类名的Activity */ public void finishActivity(Class<?> cls) { try { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } catch (Exception e) { e.printStackTrace(); } } /** * 结束所有Activity */ public void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } activityStack.clear(); } /** * 是否已经打开指定的activity * * @param cls * @return */ public boolean isOpenActivity(Class<?> cls) { if (activityStack != null) { for (int i = 0, size = activityStack.size(); i < size; i++) { if (cls == activityStack.peek().getClass()) { return true; } } } return false; }}
0 0
- Android 之 BaseActivity1
- Android之 Android 虚拟机
- Android之 Android 虚拟机
- Android之android:launchMode
- Android之android:launchMode
- Android之android:launchMode
- Android之android:launchMode
- Android 之 Android Studio
- 【Android】Android之创建活动
- 【Android】Android之intent
- android之android-autofittextview
- android 学习之---Android之GoogleMap(转)
- android高手之路之Android Widget
- Android学习之路之Android基本知识
- android之ArrayAdaper之Spinner
- android Preference之android:dependency
- Android基础之Android硬件
- android之 Android消息机制
- [Boolan] C++第六周
- A. A Serial Killer
- HLS学习(二)HLSDownloader源码分析(1)介绍
- CenterOS7在线yum安装MySQL
- 【codevs1343】[HNOI]蚱蜢
- Android 之 BaseActivity1
- 网络编程笔记
- Linux基础命令操作
- HTML <meta>汇总
- 模拟退火算法
- 健身时听适合的音乐可减少疲劳感
- MPEG-2视频编码框图
- 使用Python函数和字典实现Java中的switch功能
- vue-router同一路由地址同页面切换无效解决