Skip to content

Commit 9b49736

Browse files
committed
add range
1 parent 755b261 commit 9b49736

File tree

7 files changed

+213
-35
lines changed

7 files changed

+213
-35
lines changed

app/build.gradle

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apply plugin: 'com.android.application'
2-
2+
apply plugin: 'me.tatarka.retrolambda'
33
android {
44
compileSdkVersion 23
55
buildToolsVersion '23.0.2'
@@ -18,18 +18,23 @@ android {
1818
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
1919
}
2020
}
21+
22+
lintOptions {
23+
abortOnError false
24+
}
25+
2126
compileOptions {
2227
sourceCompatibility JavaVersion.VERSION_1_7
2328
targetCompatibility JavaVersion.VERSION_1_7
24-
}
25-
lintOptions {
26-
abortOnError false
29+
// sourceCompatibility JavaVersion.VERSION_1_8
30+
// targetCompatibility JavaVersion.VERSION_1_8
2731
}
2832
}
2933
//add for logger
3034
repositories {
3135
jcenter()
3236
maven { url "https://jitpack.io" }
37+
mavenCentral()
3338
}
3439
dependencies {
3540
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
android:theme="@style/AppTheme">
1212
<activity
1313
android:name=".activity.MainActivity"
14-
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
15-
android:screenOrientation="portrait">
14+
android:screenOrientation="portrait"
15+
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
1616
<intent-filter>
1717
<action android:name="android.intent.action.MAIN" />
1818

app/src/main/java/com/malin/rengwuxianrxjava/activity/MainActivity.java

Lines changed: 145 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@
3333
import com.orhanobut.logger.LogLevel;
3434
import com.orhanobut.logger.Logger;
3535

36+
import java.text.SimpleDateFormat;
3637
import java.util.ArrayList;
38+
import java.util.Date;
39+
import java.util.Locale;
3740
import java.util.concurrent.TimeUnit;
3841

3942
import rx.Observable;
@@ -52,7 +55,7 @@
5255
* 创建时间:15-11-10.
5356
* 备注:
5457
*/
55-
public class MainActivity extends Activity{
58+
public class MainActivity extends Activity {
5659
private static final String TAG = "MainActivity";
5760
private static final String TAG_FOR_LOGGER = "MainActivity_I_LOVE_RXJAVA";
5861
private static final String JPG = ".jpg";
@@ -62,7 +65,7 @@ public class MainActivity extends Activity{
6265
private Canvas mCanvas = null;
6366
private ProgressBar mProgressBar;
6467
private ScalpelFrameLayout mScalpelFrameLayout;
65-
private boolean mIsOpenScalpel=false;
68+
private boolean mIsOpenScalpel = false;
6669

6770
@Override
6871
protected void onCreate(Bundle savedInstanceState) {
@@ -72,7 +75,7 @@ protected void onCreate(Bundle savedInstanceState) {
7275
initView();
7376
// miZhiSuoJinAndNestedLoopAndCallbackHell();//演示谜之缩进--嵌套循环--回调地狱
7477
rxJavaSolveMiZhiSuoJinAndNestedLoopAndCallbackHell();//使用RxJava解决问题
75-
// testFuncation(16);//RxJava基础概念的练习
78+
// testFuncation(1);//RxJava基础概念的练习
7679
}
7780

7881
/**
@@ -81,6 +84,11 @@ protected void onCreate(Bundle savedInstanceState) {
8184
private void initializeLogAndDeviceInfo() {
8285
Logger.init(TAG_FOR_LOGGER).logLevel(LogLevel.FULL);//Use LogLevel.NONE for the release versions.
8386
DeviceInfo.getInstance().initializeScreenInfo(this);
87+
int bitmapSize = ImageUtils.getBitmapSize(ImageUtils.getLocalBitmapFromResFolder(getApplicationContext(),R.mipmap.ic_launcher));
88+
Logger.d("size:"+bitmapSize);
89+
Logger.d(""+DeviceInfo.screenWidthForPortrait+"x"+DeviceInfo.screenHeightForPortrait);
90+
Logger.d("mDensity--> " + DeviceInfo.mDensity);
91+
Logger.d("mDensityDpi--> " + DeviceInfo.mDensityDpi);
8492
}
8593

8694
/**
@@ -110,6 +118,8 @@ private void setContentViewLayout(boolean isOpenScalpe) {
110118
private void initView() {
111119
mImageView = (AvoidRecoveredAppearErrorImageView) findViewById(R.id.iv_image);
112120
mProgressBar = (ProgressBar) findViewById(R.id.progressbar);
121+
122+
method16();
113123
}
114124

115125

@@ -723,9 +733,9 @@ private void method8() {
723733
int size = students.size();
724734
for (int i = 0; i < size; i++) {
725735
Logger.d("姓名:" + students.get(i).name);
726-
int sizeCourses = students.get(i).courses.size();
736+
int sizeCourses = students.get(i).courses.size();
727737
for (int j = 0; j < sizeCourses; j++) {
728-
Logger.d("课程:"+students.get(i).courses.get(j).name);
738+
Logger.d("课程:" + students.get(i).courses.get(j).name);
729739
}
730740
}
731741
}
@@ -865,7 +875,7 @@ public void onNext(Student student) {
865875
* 输出每一个学生选修的课程
866876
* 对method12的简化
867877
* {@link #method12()}
868-
*
878+
* <p>
869879
* Student->ArrayList<Course>
870880
*/
871881
private void method13() {
@@ -928,22 +938,21 @@ public void call(Course course) {
928938
* 举个设置点击监听的例子。使用 RxBinding ,可以把事件监听用这样的方法来设置:
929939
* throttleFirst() ,用于去抖动,也就是消除手抖导致的快速连环点击:
930940
*/
931-
private void method15(){
932-
RxView.clicks(mImageView)
933-
.throttleFirst(500, TimeUnit.MILLISECONDS)
934-
.subscribe(new Action1<Void>() {
935-
@Override
936-
public void call(Void aVoid) {
937-
938-
Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
939-
}
940-
});
941-
}
941+
private void method15() {
942+
RxView.clicks(mImageView)
943+
.throttleFirst(500, TimeUnit.MILLISECONDS)
944+
.subscribe(new Action1<Void>() {
945+
@Override
946+
public void call(Void aVoid) {
947+
Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
948+
}
949+
});
950+
}
942951

943952
/**
944953
* RxBinding
945954
*/
946-
private void method16(){
955+
private void method16() {
947956
RxView.longClicks(mImageView)
948957
.throttleFirst(500, TimeUnit.MILLISECONDS)
949958
.subscribe(new Action1<Void>() {
@@ -956,8 +965,94 @@ public void call(Void aVoid) {
956965
});
957966
}
958967

968+
/**
969+
* 三、Defer、Just
970+
*/
971+
//操作符号 Range操作符根据出入的初始值n和数目m发射一系列大于等于n的m个值
972+
//例如:实现:输出1,2,3,4,5
973+
// 其使用也非常方便,仅仅制定初始值和数目就可以了,不用自己去实现对Subscriber的调用
974+
975+
private void method17() {
976+
Observable.range(1, 5)
977+
.subscribeOn(Schedulers.io())
978+
.observeOn(AndroidSchedulers.mainThread())
979+
.subscribe(new Action1<Integer>() {
980+
@Override
981+
public void call(Integer integer) {
982+
Logger.d(integer.toString() + "");
983+
}
984+
});
985+
}
986+
987+
988+
private static final int COUNT= 10;
989+
private static final int TIME_ALL=5000;
990+
private ArrayList<Long> timeList = new ArrayList<Long>();
991+
private void method18() {
992+
993+
int COUNT= 5;
994+
int TIME_ALL=3000;
995+
ArrayList<Long> timeList = new ArrayList<Long>();
996+
ArrayList<Long> allList = new ArrayList<Long>();
997+
998+
RxView.clicks(findViewById(R.id.iv_image))
999+
.map(new Func1<Void, Long>() {
1000+
@Override
1001+
public Long call(Void aVoid) {
1002+
return System.currentTimeMillis();
1003+
}
1004+
})
1005+
.map(new Func1<Long, Boolean>() {
1006+
@Override
1007+
public Boolean call(Long nowTime) {
1008+
allList.add(nowTime);
1009+
timeList.add(nowTime);
1010+
1011+
boolean isOver = false;
1012+
Log.d(TAG, "timeList.size():" + timeList.size());
1013+
if (timeList.size() >= COUNT) {
1014+
1015+
if (nowTime - timeList.get(0) < TIME_ALL) {
1016+
isOver = true;
1017+
} else {
1018+
isOver = false;
1019+
}
1020+
timeList.clear();
1021+
}
1022+
return isOver;
1023+
}
1024+
}).subscribe(new Action1<Boolean>() {
1025+
@Override
1026+
public void call(Boolean aBoolean) {
1027+
if (aBoolean) {
1028+
Toast.makeText(MainActivity.this, "3秒内点击超过了" + allList.size(), Toast.LENGTH_SHORT).show();
1029+
allList.clear();
1030+
} else {
1031+
// Toast.makeText(MainActivity.this, "ok "+timeList.size(), Toast.LENGTH_SHORT).show();
1032+
}
1033+
}
1034+
});
1035+
}
1036+
1037+
public static String timeLongToString(long data) {
1038+
Date date = new Date(data);
1039+
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
1040+
return formatter.format(date);
1041+
}
1042+
1043+
1044+
private void log(final String str) {
1045+
runOnUiThread(new Runnable() {
1046+
@Override
1047+
public void run() {
1048+
Log.d(TAG, str);
1049+
}
1050+
});
1051+
}
1052+
9591053
/**
9601054
* 测试这些每个知识点的功能
1055+
*
9611056
* @param number
9621057
*/
9631058
private void testFuncation(int number) {
@@ -1045,6 +1140,17 @@ private void testFuncation(int number) {
10451140
method16();
10461141
break;
10471142
}
1143+
1144+
case 17: {
1145+
method17();
1146+
break;
1147+
}
1148+
1149+
case 18: {
1150+
method18();
1151+
break;
1152+
}
1153+
10481154
default: {
10491155

10501156
break;
@@ -1154,16 +1260,28 @@ public boolean onOptionsItemSelected(MenuItem item) {
11541260
int id = item.getItemId();
11551261

11561262
//noinspection SimplifiableIfStatement
1157-
if (id == R.id.action_settings_open_scalpel) {
1158-
mIsOpenScalpel = true;
1159-
mScalpelFrameLayout.setLayerInteractionEnabled(mIsOpenScalpel);
1160-
return true;
1161-
}else if (id == R.id.action_settings_close_scalpel){
1162-
mIsOpenScalpel = false;
1163-
mScalpelFrameLayout.setLayerInteractionEnabled(mIsOpenScalpel);
1164-
return true;
1263+
if (id==R.id.action_settings_open_scalpel||id == R.id.action_settings_close_scalpel){
1264+
clickEvent(id);
11651265
}
1166-
11671266
return super.onOptionsItemSelected(item);
11681267
}
1268+
private boolean clickEvent(int id) {
1269+
boolean is = false;
1270+
switch (id) {
1271+
case R.id.action_settings_open_scalpel: {
1272+
mIsOpenScalpel = true;
1273+
mScalpelFrameLayout.setLayerInteractionEnabled(mIsOpenScalpel);
1274+
is = true;
1275+
break;
1276+
}
1277+
case R.id.action_settings_close_scalpel: {
1278+
mIsOpenScalpel = false;
1279+
mScalpelFrameLayout.setLayerInteractionEnabled(mIsOpenScalpel);
1280+
is = true;
1281+
break;
1282+
}
1283+
}
1284+
return is;
1285+
1286+
}
11691287
}

app/src/main/java/com/malin/rengwuxianrxjava/utils/DeviceInfo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class DeviceInfo {
1414

1515
public static int screenWidthForPortrait; // 屏幕宽度
1616
public static int screenHeightForPortrait; // 屏幕高度
17+
public static float mDensity;
18+
public static int mDensityDpi;
1719

1820

1921
private volatile static DeviceInfo instance;
@@ -45,6 +47,8 @@ protected DeviceInfo() {
4547
public void initializeScreenInfo(Activity activity) {
4648
DisplayMetrics metric = new DisplayMetrics();
4749
activity.getWindowManager().getDefaultDisplay().getMetrics(metric);
50+
mDensity = metric.density;
51+
mDensityDpi = metric.densityDpi;
4852
if (metric.heightPixels >= metric.widthPixels) {
4953
screenWidthForPortrait = metric.widthPixels;
5054
screenHeightForPortrait = metric.heightPixels;

app/src/main/java/com/malin/rengwuxianrxjava/utils/ImageUtils.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.malin.rengwuxianrxjava.utils;
22

3+
import android.annotation.SuppressLint;
4+
import android.annotation.TargetApi;
35
import android.content.Context;
46
import android.content.res.AssetManager;
57
import android.graphics.Bitmap;
68
import android.graphics.BitmapFactory;
9+
import android.os.Build;
710

811
import java.io.File;
912
import java.io.IOException;
@@ -188,4 +191,50 @@ private static String[] getAssetsImageNameArray(Context context, String folderNa
188191
}
189192
return imageNameArray;
190193
}
194+
195+
196+
/**
197+
* 将本地ResFolder图片转换为Bitmap
198+
*/
199+
200+
/**
201+
* inDensity 就是原始资源的 density
202+
*
203+
* inTargetDensity 就是屏幕的 density。
204+
*/
205+
206+
public static Bitmap getLocalBitmapFromResFolder(Context context, int resId) {
207+
return BitmapFactory.decodeResource(context.getResources(), resId);
208+
}
209+
210+
/**
211+
* 获取Bitmap大小
212+
* @param bitmap
213+
* @return
214+
*/
215+
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
216+
public static int getBitmapSize2(Bitmap bitmap) {
217+
if (bitmap==null) return 0;
218+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
219+
return bitmap.getRowBytes() * bitmap.getHeight();
220+
} else {
221+
return bitmap.getByteCount();
222+
}
223+
}
224+
225+
/**
226+
* 获取Bitmap大小
227+
* @param bitmap
228+
* @return
229+
*/
230+
@SuppressLint("NewApi")
231+
public static int getBitmapSize(Bitmap bitmap) {
232+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // API 19
233+
return bitmap.getAllocationByteCount();
234+
}
235+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {// API 12
236+
return bitmap.getByteCount();
237+
}
238+
return bitmap.getRowBytes() * bitmap.getHeight(); // earlier version
239+
}
191240
}
4.73 KB
Loading

0 commit comments

Comments
 (0)