├── .gitignore
├── .idea
├── .name
├── compiler.xml
├── copyright
│ └── profiles_settings.xml
├── dictionaries
│ └── DavidWang.xml
├── gradle.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── DWCorePhoto_Android.iml
├── DWCorePhoto_Android_Git.iml
├── GridShow.gif
├── ListShow.gif
├── MixShow.gif
├── README.md
├── SingleShow.gif
├── app
├── .gitignore
├── app.iml
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── davidwang
│ │ └── tm
│ │ └── dwcorephoto
│ │ └── ApplicationTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── davidwang
│ │ └── tm
│ │ ├── adapter
│ │ ├── GridViewAdapter.java
│ │ ├── ListViewAdapter.java
│ │ ├── MainListAdapter.java
│ │ └── MixListAdapter.java
│ │ ├── dwcorephoto
│ │ ├── BaseActivity.java
│ │ ├── BaseApplication.java
│ │ ├── GridViewActivity.java
│ │ ├── ListViewActivity.java
│ │ ├── MainActivity.java
│ │ ├── MixShowActivity.java
│ │ ├── PreviewImage.java
│ │ └── SingleShow.java
│ │ ├── model
│ │ ├── DialogueInfo.java
│ │ ├── ImageBDInfo.java
│ │ ├── ImageInfo.java
│ │ ├── MainInfo.java
│ │ └── Mixinfo.java
│ │ ├── tools
│ │ └── ImageLoaders.java
│ │ └── view
│ │ ├── HackyViewPager.java
│ │ ├── KeyboardLayout.java
│ │ ├── PullToZoomListView.java
│ │ └── SquareLayout.java
│ └── res
│ ├── drawable
│ └── click_content.xml
│ ├── layout
│ ├── activity_browseimage.xml
│ ├── activity_grid_view.xml
│ ├── activity_list_view.xml
│ ├── activity_main.xml
│ ├── activity_mix_show.xml
│ ├── activity_show_image.xml
│ ├── activity_single_show.xml
│ ├── evaluation_view.xml
│ ├── grid_view.xml
│ ├── list_view.xml
│ ├── main_view.xml
│ ├── mix_view.xml
│ ├── mixshow_headview.xml
│ └── waiting_view.xml
│ ├── menu
│ ├── menu_grid_view.xml
│ ├── menu_list_view.xml
│ ├── menu_main.xml
│ ├── menu_mix_show.xml
│ ├── menu_show_image.xml
│ └── menu_single_show.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ ├── mixheadimg.jpeg
│ └── userimg.jpg
│ ├── mipmap-mdpi
│ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ └── ic_launcher.png
│ ├── values-w820dp
│ └── dimens.xml
│ └── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | /local.properties
3 | /.idea/workspace.xml
4 | /.idea/libraries
5 | .DS_Store
6 | /build
7 | /captures
8 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | DWCorePhoto_Android_Git
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/dictionaries/DavidWang.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | General
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DWCorePhoto_Android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/DWCorePhoto_Android_Git.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/GridShow.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/GridShow.gif
--------------------------------------------------------------------------------
/ListShow.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/ListShow.gif
--------------------------------------------------------------------------------
/MixShow.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/MixShow.gif
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DWCorePhoto_Android
2 | 1.图片浏览放大缩小。
3 | 2.单一图片点击,放大效果,和缩放效果。
4 | 3.列表图片点击,放大效果,和缩放效果。
5 | 4.网格图片点击,放大效果,和缩放效果。
6 | 5.增加列表混合布局
7 |
8 | 6.加入缩略图和原图加载过程--> 加入高清图变量hdimg。
9 |
10 | 如果有更多想法,联系我Q:232190315.
11 | > *此项目IOS地址:(https://github.com/DavidWangTM/DWCorePhoto)
12 |
13 | # 效果图,单张点击
14 | 
15 | # 列表图,单张点击
16 | 
17 | # 网格图,单张点击
18 | 
19 | # 混合图,单张点击
20 | 
21 |
--------------------------------------------------------------------------------
/SingleShow.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/SingleShow.gif
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/app.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | generateDebugAndroidTestSources
19 | generateDebugSources
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 22
5 | buildToolsVersion "22.0.1"
6 |
7 | compileOptions {
8 | sourceCompatibility JavaVersion.VERSION_1_7
9 | targetCompatibility JavaVersion.VERSION_1_7
10 | }
11 |
12 | defaultConfig {
13 | minSdkVersion 15
14 | applicationId "davidwang.tm.dwcorephoto"
15 | targetSdkVersion 22
16 | versionCode 1
17 | versionName "1.0"
18 | }
19 | buildTypes {
20 | release {
21 | minifyEnabled false
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 | }
24 | }
25 | }
26 |
27 | dependencies {
28 | compile fileTree(dir: 'libs', include: ['*.jar'])
29 | compile 'com.android.support:appcompat-v7:22.2.1'
30 | compile 'com.github.chrisbanes.photoview:library:1.2.3'
31 | compile 'com.facebook.rebound:rebound:0.3.8'
32 | compile 'com.nineoldandroids:library:2.4.0'
33 | compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
34 | compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
35 | compile 'com.nhaarman.listviewanimations:lib-core:3.1.0@aar'
36 | }
37 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/DavidWang/Library/Android/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/davidwang/tm/dwcorephoto/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
13 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
25 |
28 |
31 |
32 |
35 |
36 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/adapter/GridViewAdapter.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.adapter;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.util.Log;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.BaseAdapter;
9 | import android.widget.ImageView;
10 |
11 | import java.io.Serializable;
12 | import java.util.ArrayList;
13 |
14 | import davidwang.tm.dwcorephoto.GridViewActivity;
15 | import davidwang.tm.dwcorephoto.PreviewImage;
16 | import davidwang.tm.dwcorephoto.R;
17 | import davidwang.tm.model.ImageBDInfo;
18 | import davidwang.tm.model.ImageInfo;
19 | import davidwang.tm.tools.ImageLoaders;
20 |
21 | /**
22 | * Created by DavidWang on 15/9/6.
23 | */
24 | public class GridViewAdapter extends BaseAdapter{
25 |
26 | private Context context;
27 | private ArrayList data;
28 | private ImageBDInfo bdInfo;
29 |
30 | public GridViewAdapter(Context context, ArrayList data) {
31 | this.context = context;
32 | this.data = data;
33 | bdInfo = new ImageBDInfo();
34 | }
35 |
36 | @Override
37 | public int getCount() {
38 | // TODO Auto-generated method stub
39 | return data.size();
40 | }
41 |
42 | @Override
43 | public Object getItem(int arg0) {
44 | // TODO Auto-generated method stub
45 | return arg0;
46 | }
47 |
48 | @Override
49 | public long getItemId(int arg0) {
50 | // TODO Auto-generated method stub
51 | return arg0;
52 | }
53 |
54 | @Override
55 | public View getView(int position, View convertView, ViewGroup arg2) {
56 | ImageInfo info = data.get(position);
57 | ViewHolder holder = null;
58 | if (convertView == null) {
59 | holder = new ViewHolder();
60 | convertView = View.inflate(context,
61 | R.layout.grid_view, null);
62 | holder.gridimage = (ImageView)convertView.findViewById(R.id.gridimage);
63 |
64 | convertView.setTag(holder);
65 | } else {
66 | holder = (ViewHolder) convertView.getTag();
67 | }
68 |
69 |
70 | ImageLoaders.setsendimg(info.url, holder.gridimage);
71 | holder.gridimage.setOnClickListener(new ImageOnclick(position,holder.gridimage));
72 |
73 | return convertView;
74 | }
75 |
76 | public class ViewHolder {
77 | ImageView gridimage;
78 | }
79 |
80 | private class ImageOnclick implements View.OnClickListener{
81 |
82 | private int index;
83 | private ImageView imageView;
84 |
85 | public ImageOnclick(int index ,ImageView imageView) {
86 | this.index = index;
87 | this.imageView = imageView;
88 | }
89 |
90 | @Override
91 | public void onClick(View v) {
92 |
93 | GridViewActivity activity = (GridViewActivity)context;
94 | View c = activity.gridView.getChildAt(0);
95 | int top = c.getTop();
96 | int firstVisiblePosition = activity.gridView.getFirstVisiblePosition() /3;
97 |
98 | int a,b;
99 | a = index / 3;
100 | b = index % 3;
101 | Log.e("1", "高==" + top + "=" + firstVisiblePosition + "b="+b);
102 | bdInfo.width = (activity.Width - 3 * dip2px(2))/3;
103 | bdInfo.height = bdInfo.width;
104 | bdInfo.x = dip2px(1) + b * bdInfo.width + b * dip2px(2);
105 | bdInfo.y = dip2px(1) + bdInfo.height * (a - firstVisiblePosition) + top + (a - firstVisiblePosition) *dip2px(2) + activity.gridView.getTop() - dip2px(1);
106 | Intent intent = new Intent(context, PreviewImage.class);
107 | intent.putExtra("data", (Serializable) data);
108 | intent.putExtra("bdinfo",bdInfo);
109 | intent.putExtra("index",index);
110 | intent.putExtra("type",2);
111 | context.startActivity(intent);
112 | }
113 | }
114 |
115 | public int dip2px(float dpValue) {
116 | final float scale = context.getResources().getDisplayMetrics().density;
117 | return (int) (dpValue * scale + 0.5f);
118 | }
119 |
120 | }
121 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/adapter/ListViewAdapter.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.adapter;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.BaseAdapter;
8 | import android.widget.ImageView;
9 |
10 | import java.io.Serializable;
11 | import java.util.ArrayList;
12 |
13 | import davidwang.tm.dwcorephoto.ListViewActivity;
14 | import davidwang.tm.dwcorephoto.PreviewImage;
15 | import davidwang.tm.dwcorephoto.R;
16 | import davidwang.tm.model.ImageBDInfo;
17 | import davidwang.tm.model.ImageInfo;
18 | import davidwang.tm.tools.ImageLoaders;
19 |
20 | /**
21 | * Created by DavidWang on 15/9/2.
22 | */
23 | public class ListViewAdapter extends BaseAdapter{
24 |
25 | private Context context;
26 | private ArrayList data;
27 | private ImageBDInfo bdInfo;
28 |
29 | public ListViewAdapter(Context context, ArrayList data) {
30 | this.context = context;
31 | this.data = data;
32 | bdInfo = new ImageBDInfo();
33 | }
34 |
35 | @Override
36 | public int getCount() {
37 | // TODO Auto-generated method stub
38 | return data.size();
39 | }
40 |
41 | @Override
42 | public Object getItem(int arg0) {
43 | // TODO Auto-generated method stub
44 | return arg0;
45 | }
46 |
47 | @Override
48 | public long getItemId(int arg0) {
49 | // TODO Auto-generated method stub
50 | return arg0;
51 | }
52 |
53 | @Override
54 | public View getView(int position, View convertView, ViewGroup arg2) {
55 | ImageInfo info = data.get(position);
56 | ViewHolder holder = null;
57 | if (convertView == null) {
58 | holder = new ViewHolder();
59 | convertView = View.inflate(context, R.layout.list_view, null);
60 | holder.list_img = (ImageView)convertView.findViewById(R.id.list_img);
61 |
62 | convertView.setTag(holder);
63 | } else {
64 | holder = (ViewHolder) convertView.getTag();
65 | }
66 |
67 | ImageLoaders.setsendimg(info.url,holder.list_img);
68 | holder.list_img.setOnClickListener(new ImageOnclick(position,holder.list_img));
69 |
70 | return convertView;
71 | }
72 |
73 | public class ViewHolder {
74 | ImageView list_img;
75 | }
76 |
77 | private class ImageOnclick implements View.OnClickListener{
78 |
79 | private int index;
80 | private ImageView imageView;
81 |
82 | public ImageOnclick(int index ,ImageView imageView) {
83 | this.index = index;
84 | this.imageView = imageView;
85 | }
86 |
87 | @Override
88 | public void onClick(View v) {
89 | ListViewActivity activity = (ListViewActivity)context;
90 | View c = activity.listView.getChildAt(0);
91 | int top = c.getTop();
92 | int firstVisiblePosition = activity.listView.getFirstVisiblePosition();
93 | bdInfo.x = imageView.getLeft();
94 | bdInfo.y = dip2px(7) + (index - firstVisiblePosition) * dip2px(70) + top + activity.listView.getTop();
95 | bdInfo.width = imageView.getLayoutParams().width;
96 | bdInfo.height = imageView.getLayoutParams().height;
97 | Intent intent = new Intent(context, PreviewImage.class);
98 | intent.putExtra("data", (Serializable) data);
99 | intent.putExtra("bdinfo",bdInfo);
100 | intent.putExtra("index",index);
101 | intent.putExtra("type",1);
102 | context.startActivity(intent);
103 | }
104 | }
105 |
106 | public int dip2px(float dpValue) {
107 | final float scale = context.getResources().getDisplayMetrics().density;
108 | return (int) (dpValue * scale + 0.5f);
109 | }
110 |
111 | /**
112 | * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
113 | */
114 | public int px2dip(float pxValue) {
115 | final float scale = context.getResources().getDisplayMetrics().density;
116 | return (int) (pxValue / scale + 0.5f);
117 | }
118 |
119 | }
120 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/adapter/MainListAdapter.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.adapter;
2 |
3 | import android.content.Context;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.BaseAdapter;
7 | import android.widget.TextView;
8 |
9 | import java.util.ArrayList;
10 |
11 | import davidwang.tm.dwcorephoto.R;
12 | import davidwang.tm.model.MainInfo;
13 |
14 | /**
15 | * Created by DavidWang on 15/8/25.
16 | */
17 | public class MainListAdapter extends BaseAdapter{
18 |
19 | private Context context;
20 | private ArrayList data;
21 |
22 | public MainListAdapter(Context context, ArrayList data) {
23 | this.context = context;
24 | this.data = data;
25 | }
26 |
27 | @Override
28 | public int getCount() {
29 | // TODO Auto-generated method stub
30 | return data.size();
31 | }
32 |
33 | @Override
34 | public Object getItem(int arg0) {
35 | // TODO Auto-generated method stub
36 | return arg0;
37 | }
38 |
39 | @Override
40 | public long getItemId(int arg0) {
41 | // TODO Auto-generated method stub
42 | return arg0;
43 | }
44 |
45 | @Override
46 | public View getView(int position, View convertView, ViewGroup arg2) {
47 | MainInfo info = data.get(position);
48 | ViewHolder holder = null;
49 | if (convertView == null) {
50 | holder = new ViewHolder();
51 | convertView = View.inflate(context,
52 | R.layout.main_view, null);
53 | holder.main_text = (TextView)convertView.findViewById(R.id.main_text);
54 |
55 | convertView.setTag(holder);
56 | } else {
57 | holder = (ViewHolder) convertView.getTag();
58 | }
59 |
60 | holder.main_text.setText(info.content);
61 | return convertView;
62 | }
63 |
64 | public class ViewHolder {
65 | TextView main_text;
66 | }
67 |
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/adapter/MixListAdapter.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.adapter;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.os.Handler;
6 | import android.text.Layout;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.view.ViewTreeObserver;
10 | import android.view.inputmethod.InputMethodManager;
11 | import android.widget.BaseAdapter;
12 | import android.widget.EditText;
13 | import android.widget.GridLayout;
14 | import android.widget.ImageView;
15 | import android.widget.LinearLayout;
16 | import android.widget.TextView;
17 |
18 | import java.io.Serializable;
19 | import java.util.ArrayList;
20 |
21 | import davidwang.tm.dwcorephoto.MixShowActivity;
22 | import davidwang.tm.dwcorephoto.PreviewImage;
23 | import davidwang.tm.dwcorephoto.R;
24 | import davidwang.tm.model.DialogueInfo;
25 | import davidwang.tm.model.ImageBDInfo;
26 | import davidwang.tm.model.ImageInfo;
27 | import davidwang.tm.model.Mixinfo;
28 | import davidwang.tm.tools.ImageLoaders;
29 |
30 | /**
31 | * Created by DavidWang on 15/10/8.
32 | */
33 | public class MixListAdapter extends BaseAdapter {
34 |
35 | private Context context;
36 | private ArrayList data;
37 | private ImageBDInfo bdInfo;
38 | private MixShowActivity activity;
39 | private int ImagaId[] = {R.id.img_0, R.id.img_1, R.id.img_2, R.id.img_3, R.id.img_4, R.id.img_5, R.id.img_6, R.id.img_7, R.id.img_8};
40 |
41 | public MixListAdapter(Context context, ArrayList data) {
42 | this.context = context;
43 | this.data = data;
44 | bdInfo = new ImageBDInfo();
45 | activity = (MixShowActivity) context;
46 | }
47 |
48 | @Override
49 | public int getCount() {
50 | // TODO Auto-generated method stub
51 | return data.size();
52 | }
53 |
54 | @Override
55 | public Object getItem(int arg0) {
56 | // TODO Auto-generated method stub
57 | return arg0;
58 | }
59 |
60 | @Override
61 | public long getItemId(int arg0) {
62 | // TODO Auto-generated method stub
63 | return arg0;
64 | }
65 |
66 | @Override
67 | public View getView(int position, View convertView, ViewGroup arg2) {
68 | Mixinfo info = data.get(position);
69 | ViewHolder holder = null;
70 | if (convertView == null) {
71 | holder = new ViewHolder();
72 | convertView = View.inflate(context, R.layout.mix_view, null);
73 | holder.list_img = (ImageView) convertView.findViewById(R.id.listuserimg);
74 | holder.username = (TextView) convertView.findViewById(R.id.username);
75 | holder.fullText = (TextView) convertView.findViewById(R.id.fullText);
76 | holder.usercontent = (TextView) convertView.findViewById(R.id.usercontent);
77 | holder.gridview = (GridLayout) convertView.findViewById(R.id.gridview);
78 | holder.showimage = (ImageView) convertView.findViewById(R.id.showimage);
79 | holder.allLayout = (LinearLayout) convertView.findViewById(R.id.allLayout);
80 |
81 | holder.evaluationLayout = (LinearLayout) convertView.findViewById(R.id.evaluationLayout);
82 | for (int i = 0; i < 9; i++) {
83 | holder.imgview[i] = (ImageView) convertView.findViewById(ImagaId[i]);
84 | }
85 | convertView.setTag(holder);
86 | } else {
87 | holder = (ViewHolder) convertView.getTag();
88 | }
89 |
90 | ImageLoaders.setsendimg(info.userimg, holder.list_img);
91 | holder.username.setText(info.username);
92 | holder.usercontent.setText(info.content);
93 | holder.showimage.setVisibility(View.GONE);
94 | holder.gridview.setVisibility(View.GONE);
95 | if (info.data.size() == 1) {
96 | holder.showimage.setVisibility(View.VISIBLE);
97 | holder.gridview.setVisibility(View.GONE);
98 | ImageInfo imageInfo = info.data.get(0);
99 | float w = imageInfo.width;
100 | float h = imageInfo.height;
101 | float width = 0.0f;
102 | float height = 0.0f;
103 | if (w > h) {
104 | width = activity.Width - dip2px(130);
105 | height = width * h / w;
106 | } else if (w < h) {
107 | height = dip2px(220);
108 | width = w * height / h;
109 | } else if (w == h) {
110 | width = activity.Width / 2;
111 | height = width * h / w;
112 | }
113 |
114 | ImageLoaders.setsendimg(imageInfo.url, holder.showimage);
115 | holder.showimage.getLayoutParams().width = (int) width;
116 | holder.showimage.getLayoutParams().height = (int) height;
117 | holder.showimage.setOnClickListener(new SingleOnclick(position, holder.showimage, holder.allLayout));
118 | } else if (info.data.size() > 1) {
119 | holder.showimage.setVisibility(View.GONE);
120 | holder.gridview.setVisibility(View.VISIBLE);
121 | int a = info.data.size() / 3;
122 | int b = info.data.size() % 3;
123 | if (b > 0) {
124 | a++;
125 | }
126 | float width = (activity.Width - dip2px(80) - dip2px(2)) / 3;
127 | holder.gridview.getLayoutParams().height = (int) (a * width);
128 |
129 | for (int i = 0; i < 9; i++) {
130 | holder.imgview[i].setVisibility(View.GONE);
131 | }
132 |
133 | for (int i = 0; i < info.data.size(); i++) {
134 | ImageInfo imageInfo = info.data.get(i);
135 | holder.imgview[i].setVisibility(View.VISIBLE);
136 | holder.imgview[i].getLayoutParams().width = (int) width;
137 | holder.imgview[i].getLayoutParams().height = (int) width;
138 | ImageLoaders.setsendimg(imageInfo.url, holder.imgview[i]);
139 | holder.imgview[i].setOnClickListener(new GridOnclick(position, holder.imgview[i], i, holder.gridview, holder.allLayout));
140 | }
141 | }
142 | setContentLayout(holder.usercontent, holder.fullText);
143 |
144 | if (info.is_select) {
145 | holder.fullText.setText("收起");
146 | holder.usercontent.setMaxLines(50);
147 | } else {
148 | holder.fullText.setText("全文");
149 | holder.usercontent.setMaxLines(6);
150 | }
151 |
152 | holder.fullText.setOnClickListener(new fullTextOnclick(holder.usercontent, holder.fullText, position));
153 |
154 | holder.evaluationLayout.removeAllViews();
155 | for (int i = 0; i < info.dialogdata.size(); i++){
156 | holder.relativeLayout = View.inflate(context, R.layout.evaluation_view, null);
157 | holder.relativeLayout.setTag( position * i+88);
158 | holder.contentText = (TextView) holder.relativeLayout.findViewById(R.id.contentText);
159 | holder.leftText = (TextView) holder.relativeLayout.findViewById(R.id.leftText);
160 | holder.defaultText = (TextView) holder.relativeLayout.findViewById(R.id.defaultText);
161 | holder.rightText = (TextView) holder.relativeLayout.findViewById(R.id.rightText);
162 | holder.contentEdit = (EditText) holder.relativeLayout.findViewById(R.id.contentEdit);
163 | holder.relativeLayout.setOnClickListener(new evaluationOnclick(position,holder.evaluationLayout,holder.allLayout));
164 | DialogueInfo dinfo = info.dialogdata.get(i);
165 | holder.contentText.setText(dinfo.content);
166 | holder.evaluationLayout.addView(holder.relativeLayout);
167 | }
168 |
169 |
170 |
171 | holder.leftText.setOnClickListener(new NameOnclick(position + "我来"));
172 | holder.rightText.setOnClickListener(new NameOnclick(position + "你来"));
173 |
174 | return convertView;
175 | }
176 |
177 | public class ViewHolder {
178 | ImageView list_img;
179 | TextView username;
180 | TextView usercontent, fullText;
181 | GridLayout gridview;
182 | ImageView showimage;
183 | ImageView imgview[] = new ImageView[9];
184 | LinearLayout evaluationLayout, allLayout;
185 | View relativeLayout;
186 | TextView contentText, leftText, defaultText, rightText;
187 | EditText contentEdit;
188 | }
189 |
190 | class SingleOnclick implements View.OnClickListener {
191 |
192 | private int index;
193 | private ImageView imageView;
194 | private LinearLayout allLayout;
195 |
196 |
197 | public SingleOnclick(int index, ImageView imageView, LinearLayout allLayout) {
198 | this.index = index;
199 | this.imageView = imageView;
200 | this.allLayout = allLayout;
201 | }
202 |
203 | @Override
204 | public void onClick(View v) {
205 |
206 | View c = activity.mixlist.getChildAt(0);
207 | int top = c.getTop();
208 | int firstVisiblePosition = activity.mixlist.getFirstVisiblePosition();
209 |
210 | float height = 0.0f;
211 | for (int i = 0; i < ((index + 1) - firstVisiblePosition); i++) {
212 | View view = activity.mixlist.getChildAt(i);
213 | height += view.getHeight();
214 | }
215 | bdInfo.x = imageView.getLeft() + allLayout.getLeft();
216 | bdInfo.y = imageView.getTop() + height + top + activity.mixlist.getTop() + allLayout.getTop();
217 | bdInfo.width = imageView.getLayoutParams().width;
218 | bdInfo.height = imageView.getLayoutParams().height;
219 | Intent intent = new Intent(context, PreviewImage.class);
220 | ArrayList info = data.get(index).data;
221 | intent.putExtra("data", (Serializable) info);
222 | intent.putExtra("bdinfo", bdInfo);
223 | intent.putExtra("index", 0);
224 | intent.putExtra("type", 0);
225 | context.startActivity(intent);
226 | }
227 | }
228 |
229 | class GridOnclick implements View.OnClickListener {
230 |
231 | private int index;
232 | private int row;
233 | private ImageView imageView;
234 | private GridLayout gridLayout;
235 | private LinearLayout allLayout;
236 |
237 | public GridOnclick(int index, ImageView imageView, int row, GridLayout gridLayout, LinearLayout allLayout) {
238 | this.index = index;
239 | this.imageView = imageView;
240 | this.gridLayout = gridLayout;
241 | this.row = row;
242 | this.allLayout = allLayout;
243 | }
244 |
245 | @Override
246 | public void onClick(View v) {
247 | View c = activity.mixlist.getChildAt(0);
248 | int top = c.getTop();
249 | int firstVisiblePosition = activity.mixlist.getFirstVisiblePosition();
250 | float height = 0.0f;
251 | for (int i = 0; i < ((index + 1) - firstVisiblePosition); i++) {
252 | View view = activity.mixlist.getChildAt(i);
253 | height += view.getHeight();
254 | }
255 | bdInfo.x = imageView.getLeft() + gridLayout.getLeft() + allLayout.getLeft();
256 | bdInfo.y = allLayout.getTop() + gridLayout.getTop() + imageView.getTop() + height + top + activity.mixlist.getTop();
257 | bdInfo.width = imageView.getLayoutParams().width;
258 | bdInfo.height = imageView.getLayoutParams().height;
259 | Intent intent = new Intent(context, PreviewImage.class);
260 | ArrayList info = data.get(index).data;
261 | intent.putExtra("data", (Serializable) info);
262 | intent.putExtra("bdinfo", bdInfo);
263 | intent.putExtra("index", row);
264 | intent.putExtra("type", 3);
265 | context.startActivity(intent);
266 | }
267 | }
268 |
269 | public int dip2px(float dpValue) {
270 | final float scale = context.getResources().getDisplayMetrics().density;
271 | return (int) (dpValue * scale + 0.5f);
272 | }
273 |
274 | class fullTextOnclick implements View.OnClickListener {
275 |
276 | private TextView usercontent;
277 | private TextView fullText;
278 | private int index;
279 |
280 | fullTextOnclick(TextView usercontent, TextView fullText, int index) {
281 | this.fullText = fullText;
282 | this.usercontent = usercontent;
283 | this.index = index;
284 | }
285 |
286 | @Override
287 | public void onClick(View v) {
288 | Mixinfo info = data.get(index);
289 | if (info.is_select) {
290 | usercontent.setMaxLines(6);
291 | fullText.setText("全文");
292 | usercontent.invalidate();
293 | } else {
294 | usercontent.setMaxLines(50);
295 | fullText.setText("收起");
296 | usercontent.invalidate();
297 | }
298 | info.is_select = !info.is_select;
299 | data.set(index, info);
300 | }
301 | }
302 |
303 |
304 | private class evaluationOnclick implements View.OnClickListener {
305 |
306 | private int index;
307 | private EditText contentEdit;
308 | private LinearLayout evaluationLayout,allLayout;
309 |
310 | evaluationOnclick(int index, LinearLayout evaluationLayout, LinearLayout allLayout) {
311 | this.index = index;
312 | this.evaluationLayout = evaluationLayout;
313 | this.allLayout = allLayout;
314 | }
315 |
316 | @Override
317 | public void onClick(View v) {
318 | contentEdit = (EditText)v.findViewById(R.id.contentEdit);
319 | contentEdit.setFocusable(true);
320 | contentEdit.requestFocus();
321 | InputMethodManager inputManager = (InputMethodManager) contentEdit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
322 | inputManager.showSoftInput(contentEdit, 0);
323 | final int hight = evaluationLayout.getTop()+v.getTop()+allLayout.getTop();
324 | new Handler().postDelayed(new Runnable() {
325 | public void run() {
326 | //execute the task
327 | activity.SendContent(index,hight);
328 | }
329 | }, 200);
330 | }
331 | }
332 |
333 | ;
334 |
335 | private void setContentLayout(final TextView usercontent,
336 | final TextView fullText) {
337 | ViewTreeObserver vto = usercontent.getViewTreeObserver();
338 | vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
339 |
340 | private boolean isInit;
341 |
342 | @Override
343 | public boolean onPreDraw() {
344 | if (isInit) {
345 | return true;
346 | }
347 | Layout layout = usercontent.getLayout();
348 | if (layout != null) {
349 | int maxline = layout.getLineCount();
350 | if (maxline > 6) {
351 | fullText.setVisibility(View.VISIBLE);
352 | } else {
353 | fullText.setVisibility(View.GONE);
354 | }
355 | isInit = true;
356 | }
357 | return true;
358 | }
359 | });
360 | }
361 |
362 | class NameOnclick implements View.OnClickListener {
363 |
364 | private String name;
365 |
366 | NameOnclick(String name) {
367 | this.name = name;
368 | }
369 |
370 | @Override
371 | public void onClick(View v) {
372 | activity.showToast(name);
373 | }
374 | }
375 |
376 |
377 |
378 | }
379 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/BaseActivity.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.annotation.TargetApi;
4 | import android.graphics.Rect;
5 | import android.os.Build;
6 | import android.os.Bundle;
7 | import android.os.Handler;
8 | import android.support.v7.app.AppCompatActivity;
9 | import android.support.v7.widget.Toolbar;
10 | import android.util.DisplayMetrics;
11 | import android.view.View;
12 | import android.view.Window;
13 | import android.view.WindowManager;
14 | import android.widget.ImageView;
15 | import android.widget.RelativeLayout;
16 | import android.widget.Toast;
17 |
18 | import com.facebook.rebound.Spring;
19 | import com.facebook.rebound.SpringConfig;
20 | import com.facebook.rebound.SpringListener;
21 | import com.facebook.rebound.SpringSystem;
22 | import com.facebook.rebound.SpringUtil;
23 | import com.nineoldandroids.animation.Animator;
24 | import com.nineoldandroids.animation.AnimatorSet;
25 | import com.nineoldandroids.animation.ObjectAnimator;
26 | import com.readystatesoftware.systembartint.SystemBarTintManager;
27 |
28 | import davidwang.tm.model.ImageBDInfo;
29 | import davidwang.tm.model.ImageInfo;
30 | import davidwang.tm.tools.ImageLoaders;
31 |
32 | /**
33 | * Created by DavidWang on 15/8/31.
34 | */
35 | public class BaseActivity extends AppCompatActivity {
36 |
37 | private Toast mToast;
38 | // 屏幕宽度
39 | public float Width;
40 | // 屏幕高度
41 | public float Height;
42 |
43 | protected ImageView showimg;
44 |
45 | public View Barview;
46 |
47 | private final Spring mSpring = SpringSystem
48 | .create()
49 | .createSpring()
50 | .addListener(new ExampleSpringListener());
51 |
52 | private RelativeLayout MainView;
53 |
54 | protected ImageBDInfo bdInfo;
55 | protected ImageInfo imageInfo;
56 | private float size, size_h;
57 |
58 | private float img_w;
59 | private float img_h;
60 |
61 | //原图高
62 | private float y_img_h;
63 | private float x_img_w;
64 | protected float to_x = 0;
65 | protected float to_y = 0;
66 | private float tx;
67 | private float ty;
68 | private int statusBarHeight;
69 | private int titleBarHeight;
70 |
71 |
72 | @Override
73 | protected void onCreate(Bundle savedInstanceState) {
74 | super.onCreate(savedInstanceState);
75 | DisplayMetrics dm = getResources().getDisplayMetrics();
76 | Width = dm.widthPixels;
77 | Height = dm.heightPixels;
78 | setToolbar(0xff009688);
79 | Rect frame = new Rect();
80 | getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
81 | statusBarHeight = frame.top;
82 | int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
83 | //statusBarHeight是上面所求的状态栏的高度
84 | titleBarHeight = contentTop - statusBarHeight;
85 | }
86 |
87 | protected void setToolbar(int color) {
88 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
89 | setTranslucentStatus(true);
90 | }
91 | SystemBarTintManager tintManager = new SystemBarTintManager(this);
92 | // enable status bar tint
93 | tintManager.setStatusBarTintEnabled(true);
94 | // enable navigation bar tint
95 | tintManager.setNavigationBarTintEnabled(true);
96 | // int color = Color.argb(255, Color.red(255), Color.green(255), Color.blue(255));
97 | tintManager.setTintColor(color);
98 | }
99 |
100 | @TargetApi(19)
101 | private void setTranslucentStatus(boolean on) {
102 | Window win = getWindow();
103 | WindowManager.LayoutParams winParams = win.getAttributes();
104 | final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
105 | if (on) {
106 | winParams.flags |= bits;
107 | } else {
108 | winParams.flags &= ~bits;
109 | }
110 | win.setAttributes(winParams);
111 | }
112 |
113 | /**
114 | * 添加头部
115 | */
116 | protected void AddToolbar() {
117 | Toolbar toolbar = (Toolbar) findViewById(R.id.id_toolbar);
118 | toolbar.setLogo(R.mipmap.ic_launcher);
119 | setSupportActionBar(toolbar);
120 | }
121 |
122 |
123 | /**
124 | * 获取资源
125 | */
126 | protected void findID() {
127 | MainView = (RelativeLayout) findViewById(R.id.MainView);
128 | }
129 |
130 | /**
131 | * 监听
132 | */
133 | protected void Listener() {
134 | }
135 |
136 | /**
137 | * 对传递数据处
138 | */
139 | protected void initIntent() {
140 |
141 | }
142 |
143 | /**
144 | * 初始
145 | */
146 | public void InData() {
147 | }
148 |
149 | /**
150 | * 显示提示信息
151 | *
152 | * @param text 提示文本
153 | */
154 | public void showToast(String text) {
155 | if (mToast == null) {
156 | mToast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
157 | } else {
158 | mToast.setText(text);
159 | mToast.setDuration(Toast.LENGTH_SHORT);
160 | }
161 | mToast.show();
162 | }
163 |
164 | /**
165 | * 清空Toast
166 | */
167 | public void cancelToast() {
168 | if (mToast != null) {
169 | mToast.cancel();
170 | }
171 | }
172 |
173 | protected void getValue() {
174 | showimg = new ImageView(this);
175 | showimg.setScaleType(ImageView.ScaleType.CENTER_CROP);
176 | ImageLoaders.setsendimg(imageInfo.url, showimg);
177 | img_w = bdInfo.width;
178 | img_h = bdInfo.height;
179 | size = Width / img_w;
180 | y_img_h = imageInfo.height * Width / imageInfo.width;
181 | size_h = y_img_h / img_h;
182 | if (y_img_h > Height){
183 | size_h = Height / img_h;
184 | x_img_w = imageInfo.width * Height / imageInfo.height;
185 | size = x_img_w / img_w;
186 | }
187 | RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams((int) bdInfo.width, (int) bdInfo.height);
188 | showimg.setLayoutParams(p);
189 | p.setMargins((int) bdInfo.x, (int) bdInfo.y, (int) (Width - (bdInfo.x + bdInfo.width)), (int) (Height - (bdInfo.y + bdInfo.height)));
190 | MainView.addView(showimg);
191 |
192 | Barview = View.inflate(this, R.layout.waiting_view, null);
193 | Barview.setVisibility(View.GONE);
194 | RelativeLayout.LayoutParams p1 = new RelativeLayout.LayoutParams((int)Width, (int)Height);
195 | Barview.setLayoutParams(p1);
196 | MainView.addView(Barview);
197 |
198 | showimg.setVisibility(View.VISIBLE);
199 | new Handler().postDelayed(new Runnable() {
200 | public void run() {
201 | setShowimage();
202 | }
203 | }, 300);
204 | }
205 |
206 | protected void setShowimage() {
207 | if (mSpring.getEndValue() == 0) {
208 | mSpring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(170, 5));
209 | tx = Width / 2 - (bdInfo.x + img_w / 2);
210 | ty = Height / 2 - (bdInfo.y + img_h / 2);
211 | MoveView();
212 | return;
213 | }
214 | mSpring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(1, 5));
215 | mSpring.setEndValue(0);
216 | new Handler().postDelayed(new Runnable() {
217 | public void run() {
218 | //execute the task
219 | MoveBackView();
220 | }
221 | }, 300);
222 |
223 | }
224 |
225 | private class ExampleSpringListener implements SpringListener {
226 |
227 | @Override
228 | public void onSpringUpdate(Spring spring) {
229 | double CurrentValue = spring.getCurrentValue();
230 | float mappedValue = (float) SpringUtil.mapValueFromRangeToRange(CurrentValue, 0, 1, 1, size);
231 | float mapy = (float) SpringUtil.mapValueFromRangeToRange(CurrentValue, 0, 1, 1, size_h);
232 | showimg.setScaleX(mappedValue);
233 | showimg.setScaleY(mapy);
234 | if (CurrentValue == 1) {
235 | EndSoring();
236 | }
237 | }
238 |
239 | @Override
240 | public void onSpringAtRest(Spring spring) {
241 |
242 | }
243 |
244 | @Override
245 | public void onSpringActivate(Spring spring) {
246 |
247 | }
248 |
249 | @Override
250 | public void onSpringEndStateChange(Spring spring) {
251 |
252 | }
253 | }
254 |
255 | protected void EndSoring() {
256 |
257 | }
258 |
259 | protected void EndMove() {
260 |
261 | }
262 |
263 | @Override
264 | public void onWindowFocusChanged(boolean hasFocus) {
265 | super.onWindowFocusChanged(hasFocus);
266 |
267 | }
268 |
269 |
270 | public int dip2px(float dpValue) {
271 | final float scale = getResources().getDisplayMetrics().density;
272 | return (int) (dpValue * scale + 0.5f);
273 | }
274 |
275 | /**
276 | * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
277 | */
278 | public int px2dip(float pxValue) {
279 | final float scale = getResources().getDisplayMetrics().density;
280 | return (int) (pxValue / scale + 0.5f);
281 | }
282 |
283 |
284 | private void MoveView() {
285 | ObjectAnimator.ofFloat(MainView, "alpha", 0.8f).setDuration(0).start();
286 | MainView.setVisibility(View.VISIBLE);
287 | AnimatorSet set = new AnimatorSet();
288 | set.playTogether(
289 | ObjectAnimator.ofFloat(showimg, "translationX", tx).setDuration(200),
290 | ObjectAnimator.ofFloat(showimg, "translationY", ty).setDuration(200),
291 | ObjectAnimator.ofFloat(MainView, "alpha", 1).setDuration(200)
292 |
293 | );
294 | set.addListener(new Animator.AnimatorListener() {
295 | @Override
296 | public void onAnimationStart(Animator animator) {
297 |
298 | }
299 |
300 | @Override
301 | public void onAnimationEnd(Animator animator) {
302 | if (imageInfo.hdurl == null) {
303 | showimg.setScaleType(ImageView.ScaleType.FIT_XY);
304 | mSpring.setEndValue(1);
305 | } else {
306 | HDImageChange();
307 | }
308 | }
309 |
310 | @Override
311 | public void onAnimationCancel(Animator animator) {
312 |
313 | }
314 |
315 | @Override
316 | public void onAnimationRepeat(Animator animator) {
317 |
318 | }
319 | });
320 | set.start();
321 |
322 | }
323 |
324 | private void HDImageChange() {
325 | ImageLoaders.setsendimg(imageInfo.hdurl,showimg);
326 | showimg.setScaleType(ImageView.ScaleType.FIT_XY);
327 | mSpring.setEndValue(1);
328 | // ImageLoaders.sethdimg(imageInfo.hdurl, showimg, new ImageLoadingListener() {
329 | // @Override
330 | // public void onLoadingStarted(String imageUri, View view) {
331 | // //这里加载过度动画
332 | // Barview.setVisibility(View.VISIBLE);
333 | // }
334 | //
335 | // @Override
336 | // public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
337 | // //加载失败
338 | // showToast("加载失败.");
339 | // }
340 | //
341 | // @Override
342 | // public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
343 | // //加载成功
344 | // Barview.setVisibility(View.GONE);
345 | // showimg.setScaleType(ImageView.ScaleType.FIT_XY);
346 | // mSpring.setEndValue(1);
347 | // }
348 | //
349 | // @Override
350 | // public void onLoadingCancelled(String imageUri, View view) {
351 | // //取消加载
352 | // }
353 | // });
354 | }
355 |
356 | private void MoveBackView() {
357 | AnimatorSet set = new AnimatorSet();
358 | set.playTogether(
359 | ObjectAnimator.ofFloat(showimg, "translationX", to_x).setDuration(200),
360 | ObjectAnimator.ofFloat(showimg, "translationY", to_y).setDuration(200)
361 | );
362 | set.addListener(new Animator.AnimatorListener() {
363 | @Override
364 | public void onAnimationStart(Animator animator) {
365 | showimg.setScaleType(ImageView.ScaleType.CENTER_CROP);
366 | }
367 |
368 | @Override
369 | public void onAnimationEnd(Animator animator) {
370 | EndMove();
371 | }
372 |
373 | @Override
374 | public void onAnimationCancel(Animator animator) {
375 |
376 | }
377 |
378 | @Override
379 | public void onAnimationRepeat(Animator animator) {
380 |
381 | }
382 | });
383 | set.start();
384 | }
385 |
386 | }
387 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/BaseApplication.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.app.Application;
4 | import android.content.Context;
5 |
6 | import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
7 | import com.nostra13.universalimageloader.core.ImageLoader;
8 | import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
9 | import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
10 |
11 | public class BaseApplication extends Application {
12 |
13 | @Override
14 | public void onCreate() {
15 | super.onCreate();
16 | initImageLoader(getApplicationContext());
17 | }
18 |
19 | public void initImageLoader(Context context) {
20 | // This configuration tuning is custom. You can tune every option, you
21 | // may tune some of them,
22 | // or you can create default configuration by
23 | // ImageLoaderConfiguration.createDefault(this);
24 | // method.
25 | ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
26 | context).threadPriority(Thread.NORM_PRIORITY - 2)
27 | .denyCacheImageMultipleSizesInMemory()
28 | .diskCacheFileNameGenerator(new Md5FileNameGenerator())
29 | .tasksProcessingOrder(QueueProcessingType.LIFO)
30 | .memoryCacheSize(2 * 1024 * 1024) //缓存到内存的最大数据
31 | .memoryCacheSize(50 * 1024 * 1024) //设置内存缓存的大小
32 | .diskCacheFileCount(200)
33 | .writeDebugLogs() // Remove for release app
34 | .build();
35 | // Initialize ImageLoader with configuration.
36 | ImageLoader.getInstance().init(config);
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/GridViewActivity.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.os.Bundle;
4 | import android.view.KeyEvent;
5 | import android.view.MenuItem;
6 | import android.widget.GridView;
7 |
8 | import java.util.ArrayList;
9 |
10 | import davidwang.tm.adapter.GridViewAdapter;
11 | import davidwang.tm.model.ImageInfo;
12 |
13 | public class GridViewActivity extends BaseActivity {
14 |
15 | public GridView gridView;
16 | private GridViewAdapter adapter;
17 | private ArrayList data;
18 |
19 | @Override
20 | protected void onCreate(Bundle savedInstanceState) {
21 | super.onCreate(savedInstanceState);
22 | setContentView(R.layout.activity_grid_view);
23 | findID();
24 | InData();
25 | AddToolbar();
26 |
27 | }
28 |
29 | @Override
30 | protected void findID() {
31 | super.findID();
32 | gridView = (GridView)findViewById(R.id.gridview);
33 |
34 | }
35 |
36 | @Override
37 | public void InData() {
38 | super.InData();
39 | data = new ArrayList();
40 | for (int i = 0 ; i < 5; i++) {
41 | ImageInfo model = new ImageInfo();
42 | model.url = "http://img4q.duitang.com/uploads/item/201408/11/20140811141753_iNtAF.jpeg";
43 | model.width = 1280;
44 | model.height = 720;
45 | data.add(model);
46 | ImageInfo model1 = new ImageInfo();
47 | model1.url = "http://imgsrc.baidu.com/forum/pic/item/8b82b9014a90f603fa18d50f3912b31bb151edca.jpg";
48 | model1.width = 1280;
49 | model1.height = 720;
50 | data.add(model1);
51 | ImageInfo model2 = new ImageInfo();
52 | model2.url = "http://imgsrc.baidu.com/forum/pic/item/8e230cf3d7ca7bcb3acde5a2be096b63f724a8b2.jpg";
53 | model2.width = 1280;
54 | model2.height = 720;
55 | data.add(model2);
56 | ImageInfo model3 = new ImageInfo();
57 | model3.url = "http://att.bbs.duowan.com/forum/201210/20/210446opy9p5pghu015p9u.jpg";
58 | model3.width = 1280;
59 | model3.height = 720;
60 | data.add(model3);
61 | ImageInfo model4 = new ImageInfo();
62 | model4.url = "http://img5.duitang.com/uploads/item/201404/11/20140411214939_XswXa.jpeg";
63 | model4.width = 1280;
64 | model4.height = 720;
65 | data.add(model4);
66 | }
67 | adapter = new GridViewAdapter(GridViewActivity.this,data);
68 | gridView.setAdapter(adapter);
69 |
70 | }
71 |
72 |
73 | @Override
74 | public boolean onOptionsItemSelected(MenuItem item) {
75 | switch (item.getItemId()) {
76 | case android.R.id.home:
77 | finish();
78 | break;
79 | }
80 | return super.onOptionsItemSelected(item);
81 | }
82 |
83 |
84 | @Override
85 | public boolean onKeyDown(int keyCode, KeyEvent event) {
86 | return super.onKeyDown(keyCode, event);
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/ListViewActivity.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.view.MotionEventCompat;
5 | import android.util.Log;
6 | import android.view.MenuItem;
7 | import android.view.MotionEvent;
8 | import android.view.View;
9 | import android.widget.AbsListView;
10 | import android.widget.ListView;
11 | import android.widget.RelativeLayout;
12 |
13 | import com.nhaarman.listviewanimations.appearance.simple.SwingLeftInAnimationAdapter;
14 |
15 | import java.util.ArrayList;
16 |
17 | import davidwang.tm.adapter.ListViewAdapter;
18 | import davidwang.tm.model.ImageInfo;
19 |
20 | public class ListViewActivity extends BaseActivity implements View.OnTouchListener,AbsListView.OnScrollListener{
21 |
22 | public ListView listView;
23 | private ListViewAdapter adapter;
24 | private ArrayList data;
25 | private RelativeLayout relative;
26 |
27 | private boolean is_top ;
28 |
29 | @Override
30 | protected void onCreate(Bundle savedInstanceState) {
31 | super.onCreate(savedInstanceState);
32 | setContentView(R.layout.activity_list_view);
33 | findID();
34 | InData();
35 | Listener();
36 | AddToolbar();
37 |
38 |
39 |
40 | }
41 |
42 | @Override
43 | protected void findID() {
44 | super.findID();
45 | listView = (ListView)findViewById(R.id.listview);
46 | // relative = (RelativeLayout)findViewById(R.id.relative);
47 | }
48 |
49 |
50 | @Override
51 | public void InData() {
52 | super.InData();
53 | data = new ArrayList();
54 | for (int i = 0 ; i < 5; i++) {
55 | ImageInfo model = new ImageInfo();
56 | model.url = "http://img4q.duitang.com/uploads/item/201408/11/20140811141753_iNtAF.jpeg";
57 | model.width = 1280;
58 | model.height = 720;
59 | data.add(model);
60 | ImageInfo model1 = new ImageInfo();
61 | model1.url = "http://imgsrc.baidu.com/forum/pic/item/8b82b9014a90f603fa18d50f3912b31bb151edca.jpg";
62 | model1.width = 1280;
63 | model1.height = 720;
64 | data.add(model1);
65 | ImageInfo model2 = new ImageInfo();
66 | model2.url = "http://imgsrc.baidu.com/forum/pic/item/8e230cf3d7ca7bcb3acde5a2be096b63f724a8b2.jpg";
67 | model2.width = 1280;
68 | model2.height = 720;
69 | data.add(model2);
70 | ImageInfo model3 = new ImageInfo();
71 | model3.url = "http://att.bbs.duowan.com/forum/201210/20/210446opy9p5pghu015p9u.jpg";
72 | model3.width = 1280;
73 | model3.height = 720;
74 | data.add(model3);
75 | ImageInfo model4 = new ImageInfo();
76 | model4.url = "http://img5.duitang.com/uploads/item/201404/11/20140411214939_XswXa.jpeg";
77 | model4.width = 1280;
78 | model4.height = 720;
79 | data.add(model4);
80 | }
81 | adapter = new ListViewAdapter(ListViewActivity.this,data);
82 | SwingLeftInAnimationAdapter animationAdapter = new SwingLeftInAnimationAdapter(adapter);
83 | animationAdapter.setAbsListView(listView);
84 | listView.setAdapter(animationAdapter);
85 |
86 | }
87 |
88 | @Override
89 | protected void Listener() {
90 | super.Listener();
91 | listView.setOnTouchListener(this);
92 | listView.setOnScrollListener(this);
93 | }
94 |
95 | @Override
96 | public boolean onOptionsItemSelected(MenuItem item) {
97 | switch (item.getItemId()) {
98 | case android.R.id.home:
99 | finish();
100 | break;
101 | }
102 | return super.onOptionsItemSelected(item);
103 | }
104 |
105 | @Override
106 | public boolean onTouch(View v, MotionEvent event) {
107 | Log.e("1",event.getY()+"-Y");
108 | int actionMasked = MotionEventCompat.getActionMasked(event);
109 | switch (actionMasked){
110 | case MotionEvent.ACTION_DOWN: {
111 | break;
112 | }
113 | case MotionEvent.ACTION_MOVE: {
114 | break;
115 | }
116 | case MotionEvent.ACTION_UP:{
117 | break;
118 | }
119 | }
120 | return false;
121 | }
122 |
123 | @Override
124 | public void onScrollStateChanged(AbsListView view, int scrollState) {
125 |
126 | }
127 |
128 | @Override
129 | public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
130 | if(firstVisibleItem == 0){
131 | Log.e("log", "滑到顶部");
132 | is_top = true;
133 | }else{
134 | Log.e("log", "滑到中");
135 | is_top = false;
136 | }
137 | if(visibleItemCount+firstVisibleItem==totalItemCount){
138 | // Log.e("log", "滑到底部");
139 | }
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/MainActivity.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 | import android.view.View;
6 | import android.widget.AdapterView;
7 | import android.widget.ListView;
8 |
9 | import java.util.ArrayList;
10 |
11 | import davidwang.tm.adapter.MainListAdapter;
12 | import davidwang.tm.model.MainInfo;
13 |
14 | public class MainActivity extends BaseActivity implements AdapterView.OnItemClickListener{
15 |
16 | private ListView main_list;
17 | private MainListAdapter adapter;
18 | private ArrayList data;
19 |
20 | @Override
21 | protected void onCreate(Bundle savedInstanceState) {
22 | super.onCreate(savedInstanceState);
23 | setContentView(R.layout.activity_main);
24 | findID();
25 | inData();
26 | adapter = new MainListAdapter(this,data);
27 | main_list.setAdapter(adapter);
28 | AddToolbar();
29 | }
30 |
31 | protected void findID(){
32 | main_list = (ListView)findViewById(R.id.main_list);
33 | main_list.setOnItemClickListener(this);
34 | }
35 |
36 | protected void inData() {
37 | data = new ArrayList();
38 | MainInfo info = new MainInfo();
39 | info.content = "SingleShow";
40 | data.add(info);
41 |
42 | MainInfo info1 = new MainInfo();
43 | info1.content = "TableViewShow";
44 | data.add(info1);
45 |
46 | MainInfo info2 = new MainInfo();
47 | info2.content = "CollectionShow";
48 | data.add(info2);
49 |
50 | MainInfo info3 = new MainInfo();
51 | info3.content = "MixShow";
52 | data.add(info3);
53 | }
54 |
55 | @Override
56 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
57 | Intent intent = null;
58 | switch (position){
59 | case 0:
60 | intent = new Intent(MainActivity.this,SingleShow.class);
61 | break;
62 | case 1:
63 | intent = new Intent(MainActivity.this,ListViewActivity .class);
64 | break;
65 | case 2:
66 | intent = new Intent(MainActivity.this,GridViewActivity.class);
67 | break;
68 | case 3:
69 | intent = new Intent(MainActivity.this,MixShowActivity.class);
70 | break;
71 | }
72 | if (intent != null)
73 | startActivity(intent);
74 | }
75 |
76 | }
77 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/MixShowActivity.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 | import android.os.Handler;
6 | import android.view.KeyEvent;
7 | import android.view.View;
8 | import android.view.inputmethod.InputMethodManager;
9 | import android.widget.AdapterView;
10 | import android.widget.Button;
11 | import android.widget.EditText;
12 | import android.widget.ImageView;
13 | import android.widget.RelativeLayout;
14 |
15 | import java.util.ArrayList;
16 |
17 | import davidwang.tm.adapter.MixListAdapter;
18 | import davidwang.tm.model.DialogueInfo;
19 | import davidwang.tm.model.ImageInfo;
20 | import davidwang.tm.model.Mixinfo;
21 | import davidwang.tm.view.PullToZoomListView;
22 |
23 | public class MixShowActivity extends BaseActivity implements AdapterView.OnItemClickListener, View.OnClickListener, PullToZoomListView.BackTouchEvent {
24 |
25 | public PullToZoomListView mixlist;
26 | private MixListAdapter adapterData;
27 | private ArrayList data;
28 |
29 | private RelativeLayout bottomView;
30 | private EditText editText;
31 | private Button sendBtn;
32 | private int height_top = 0;
33 | private int keyHeight = 0;
34 | private int index;
35 |
36 |
37 | @Override
38 | protected void onCreate(Bundle savedInstanceState) {
39 | super.onCreate(savedInstanceState);
40 | setContentView(R.layout.activity_mix_show);
41 | findID();
42 | InData();
43 | AddToolbar();
44 | keyHeight = (int) Height / 3;
45 | }
46 |
47 | @Override
48 | protected void findID() {
49 | super.findID();
50 | mixlist = (PullToZoomListView) findViewById(R.id.mixlist);
51 | mixlist.getHeaderView().setImageResource(R.mipmap.mixheadimg);
52 | mixlist.getHeaderView().setScaleType(ImageView.ScaleType.CENTER_CROP);
53 | mixlist.setOnItemClickListener(this);
54 | mixlist.setTouchEvent(this);
55 | bottomView = (RelativeLayout) findViewById(R.id.bottomView);
56 | editText = (EditText) findViewById(R.id.editText);
57 | sendBtn = (Button) findViewById(R.id.sendBtn);
58 | mixlist.addOnLayoutChangeListener(new LayoutChangeListener());
59 | sendBtn.setOnClickListener(this);
60 | }
61 |
62 | @Override
63 | public void InData() {
64 | super.InData();
65 | data = new ArrayList();
66 |
67 | Mixinfo info1 = new Mixinfo();
68 | info1.username = "DavidWang";
69 | info1.userimg = "http://imgsrc.baidu.com/forum/pic/item/8b82b9014a90f603fa18d50f3912b31bb151edca.jpg";
70 | info1.content = "这是一个单张的演示";
71 | info1.data = AddData(1, 0);
72 | info1.dialogdata = AddDialog();
73 | data.add(info1);
74 |
75 | Mixinfo info2 = new Mixinfo();
76 | info2.username = "DavidWang";
77 | info2.userimg = "http://imgsrc.baidu.com/forum/pic/item/8b82b9014a90f603fa18d50f3912b31bb151edca.jpg";
78 | info2.content = "这是一个单张的演示";
79 | info2.data = AddData(1, 1);
80 | info2.dialogdata = AddDialog();
81 | data.add(info2);
82 |
83 | Mixinfo info3 = new Mixinfo();
84 | info3.username = "DavidWang";
85 | info3.userimg = "http://imgsrc.baidu.com/forum/pic/item/8b82b9014a90f603fa18d50f3912b31bb151edca.jpg";
86 | info3.content = "这是一个单张的演示";
87 | info3.data = AddData(1, 2);
88 | info3.dialogdata = AddDialog();
89 | data.add(info3);
90 |
91 | for (int i = 2; i < 10; i++) {
92 | Mixinfo info4 = new Mixinfo();
93 | info4.username = "DavidWang";
94 | info4.userimg = "http://imgsrc.baidu.com/forum/pic/item/8b82b9014a90f603fa18d50f3912b31bb151edca.jpg";
95 | info4.content = "这是" + i + "个单张的演示测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度测试字符长度";
96 | info4.data = AddData(i, 2);
97 | info4.dialogdata = AddDialog();
98 | data.add(info4);
99 | }
100 |
101 | adapterData = new MixListAdapter(MixShowActivity.this, data);
102 | mixlist.setAdapter(adapterData);
103 |
104 | }
105 |
106 | private ArrayList AddData(int num, int type) {
107 | ArrayList data = new ArrayList();
108 | for (int i = 0; i < num; i++) {
109 | if (type == 0) {
110 | ImageInfo info = new ImageInfo();
111 | info.url = "http://img4q.duitang.com/uploads/item/201408/11/20140811141753_iNtAF.jpeg";
112 | info.width = 1280;
113 | info.height = 720;
114 |
115 | data.add(info);
116 | } else if (type == 1) {
117 | ImageInfo info = new ImageInfo();
118 | info.url = "http://article.joyme.com/article/uploads/allimg/140812/101I01291-10.jpg";
119 | info.width = 640;
120 | info.height = 960;
121 | data.add(info);
122 |
123 | } else {
124 | ImageInfo info = new ImageInfo();
125 | info.url = "http://h.hiphotos.baidu.com/album/scrop%3D236%3Bq%3D90/sign=2fab0be130adcbef056a3959dc921cee/4b90f603738da977c61bb40eb151f8198618e3db.jpg";
126 | info.width = 236;
127 | info.height = 236;
128 | data.add(info);
129 | }
130 | }
131 | return data;
132 | }
133 |
134 | private ArrayList AddDialog() {
135 | ArrayList dialogdata = new ArrayList();
136 | DialogueInfo dinfo = new DialogueInfo();
137 | dinfo.content = "我来回复你来:哇哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哇哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈";
138 | dialogdata.add(dinfo);
139 | return dialogdata;
140 | }
141 |
142 | @Override
143 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
144 | hideEdit();
145 | }
146 |
147 | @Override
148 | public void onClick(View v) {
149 | switch (v.getId()) {
150 | case R.id.sendBtn:
151 | String content = editText.getText().toString();
152 | if (content.length() > 0) {
153 | DialogueInfo dinfo = new DialogueInfo();
154 | dinfo.leftname = "我来";
155 | dinfo.rightname = "你来";
156 | dinfo.content = dinfo.leftname + "回复" + dinfo.rightname + ":" + content;
157 | Mixinfo minfo = data.get(index);
158 | ArrayList dialogarr = minfo.dialogdata;
159 | dialogarr.add(dinfo);
160 | adapterData.notifyDataSetChanged();
161 | }
162 | hideEdit();
163 | break;
164 | }
165 | }
166 |
167 | private void hideEdit() {
168 | if (bottomView.getVisibility() == View.VISIBLE) {
169 | bottomView.setVisibility(View.GONE);
170 | editText.setText("");
171 | InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
172 | imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); //强制隐藏键盘
173 | }
174 | }
175 |
176 | public void SendContent(final int index, final int hight) {
177 | this.index = index;
178 | bottomView.setVisibility(View.VISIBLE);
179 | editText.setFocusable(true);
180 | editText.requestFocus();
181 | new Handler().postDelayed(new Runnable() {
182 | public void run() {
183 | View v = mixlist.getChildAt(0);
184 | int top = (v == null) ? 0 : v.getTop();
185 | if (height_top == 0) {
186 | height_top = hight + top - dip2px(50);
187 | }
188 | mixlist.setSelectionFromTop((index + 1), height_top - hight);
189 | }
190 | }, 100);
191 | }
192 |
193 | @Override
194 | public boolean dispatchKeyEvent(KeyEvent event) {
195 | if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
196 | hideEdit();
197 | return true;
198 | }
199 | return super.dispatchKeyEvent(event);
200 | }
201 |
202 | private class LayoutChangeListener implements View.OnLayoutChangeListener {
203 | @Override
204 | public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
205 | if (oldBottom != 0 && bottom != 0 && (oldBottom - bottom > keyHeight)) {
206 | //软键盘弹起
207 | } else if (oldBottom != 0 && bottom != 0 && (bottom - oldBottom > keyHeight)) {
208 | //软键盘消失
209 | bottomView.setVisibility(View.GONE);
210 | }
211 | }
212 | }
213 |
214 | @Override
215 | protected void onResume() {
216 | super.onResume();
217 | hideEdit();
218 | }
219 |
220 | @Override
221 | public void OnTouchEvent() {
222 | hideEdit();
223 | }
224 | }
225 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/PreviewImage.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.graphics.Bitmap;
4 | import android.os.Bundle;
5 | import android.os.Handler;
6 | import android.support.v4.view.PagerAdapter;
7 | import android.support.v4.view.ViewPager.OnPageChangeListener;
8 | import android.view.KeyEvent;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.view.ViewGroup.LayoutParams;
12 | import android.widget.ImageView;
13 | import android.widget.LinearLayout;
14 | import android.widget.RelativeLayout;
15 |
16 | import com.nostra13.universalimageloader.cache.memory.MemoryCache;
17 | import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
18 |
19 | import java.util.ArrayList;
20 | import java.util.Collections;
21 | import java.util.LinkedList;
22 | import java.util.List;
23 |
24 | import davidwang.tm.model.ImageBDInfo;
25 | import davidwang.tm.model.ImageInfo;
26 | import davidwang.tm.tools.ImageLoaders;
27 | import davidwang.tm.view.HackyViewPager;
28 | import uk.co.senab.photoview.PhotoView;
29 | import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
30 |
31 | public class PreviewImage extends BaseActivity implements OnPageChangeListener {
32 |
33 | private int index = 0;
34 | private HackyViewPager viewpager;
35 | private ArrayList ImgList;
36 |
37 | private SamplePagerAdapter pagerAdapter;
38 | private float moveheight;
39 | private int type;
40 |
41 | private LinearLayout AddLayout;
42 | private View moveView;
43 | private RelativeLayout addrelative;
44 | private boolean is_touch = false;
45 | private MemoryCache cache;
46 |
47 | @Override
48 | protected void onCreate(Bundle savedInstanceState) {
49 | // TODO Auto-generated method stub
50 | super.onCreate(savedInstanceState);
51 | setContentView(R.layout.activity_browseimage);
52 | findID();
53 | Listener();
54 | InData();
55 | getValue();
56 | setToolbar(0xff000000);
57 | AddInstructionsView();
58 | }
59 |
60 | @Override
61 | public void findID() {
62 | // TODO Auto-generated method stub
63 | super.findID();
64 | viewpager = (HackyViewPager) findViewById(R.id.bi_viewpager);
65 | AddLayout = (LinearLayout) findViewById(R.id.AddLayout);
66 | moveView = (View) findViewById(R.id.moveView);
67 | addrelative = (RelativeLayout) findViewById(R.id.addrelative);
68 | }
69 |
70 | @Override
71 | public void Listener() {
72 | // TODO Auto-generated method stub
73 | super.Listener();
74 | viewpager.setOnPageChangeListener(this);
75 | }
76 |
77 | @Override
78 | public void InData() {
79 | // TODO Auto-generated method stub
80 | super.InData();
81 | index = getIntent().getIntExtra("index", 0);
82 | type = getIntent().getIntExtra("type", 0);
83 | ImgList = (ArrayList) getIntent().getSerializableExtra("data");
84 | imageInfo = ImgList.get(index);
85 | bdInfo = (ImageBDInfo) getIntent().getSerializableExtra("bdinfo");
86 | pagerAdapter = new SamplePagerAdapter();
87 | viewpager.setAdapter(pagerAdapter);
88 | viewpager.setCurrentItem(index);
89 | moveView.setX(dip2px(10) * index);
90 | if (ImgList.size() == 1) {
91 | addrelative.setVisibility(View.GONE);
92 | }
93 | if (type == 1) {
94 | moveheight = dip2px(70);
95 | } else if (type == 2) {
96 | moveheight = (Width - 3 * dip2px(2)) / 3;
97 | } else if (type == 3) {
98 | moveheight = (Width - dip2px(80) - dip2px(2)) / 3;
99 | }
100 | }
101 |
102 | @Override
103 | public void onPageScrollStateChanged(int arg0) {
104 | // TODO Auto-generated method stub
105 | }
106 |
107 | @Override
108 | public void onPageScrolled(int arg0, float arg1, int arg2) {
109 | // TODO Auto-generated method stub
110 | moveView.setX(dip2px(5) + dip2px(10) * arg0 + dip2px(10) * arg1);
111 |
112 | }
113 |
114 | @Override
115 | public void onPageSelected(int arg0) {
116 | // TODO Auto-generated method stub
117 | if (showimg == null) {
118 | return;
119 | }
120 | ImageInfo info = ImgList.get(arg0);
121 | ImageLoaders.setsendimg(info.url, showimg);
122 | if (type == 1) {
123 | int move_index = arg0 - index;
124 | to_y = move_index * moveheight;
125 | } else if (type == 2) {
126 | int a = index / 3;
127 | int b = index % 3;
128 | int a1 = arg0 / 3;
129 | int b1 = arg0 % 3;
130 | to_y = (a1 - a) * moveheight + (a1 - a) * dip2px(2);
131 | to_x = (b1 - b) * moveheight + (b1 - b) * dip2px(2);
132 | } else if (type == 3) {
133 | int a = index / 3;
134 | int b = index % 3;
135 | int a1 = arg0 / 3;
136 | int b1 = arg0 % 3;
137 | to_y = (a1 - a) * moveheight + (a1 - a) * dip2px(1);
138 | to_x = (b1 - b) * moveheight + (b1 - b) * dip2px(1);
139 | }
140 | }
141 |
142 | class SamplePagerAdapter extends PagerAdapter {
143 |
144 | @Override
145 | public int getCount() {
146 | return ImgList.size();
147 | }
148 |
149 | @Override
150 | public View instantiateItem(ViewGroup container, int position) {
151 | PhotoView photoView = new PhotoView(container.getContext());
152 | String path = ImgList.get(position).url;
153 | String dbpath = null;
154 | if (ImgList.get(position).hdurl != null){
155 | dbpath = ImgList.get(position).hdurl;
156 | }
157 | ImageLoaders.setsendimg(path,photoView);
158 | if (dbpath != null){
159 | ImageLoaders.sethdimg(dbpath,photoView,new AnimateFirstDisplayListener());
160 | }
161 | // Now just add PhotoView to ViewPager and return it
162 | photoView.setOnViewTapListener(new OnViewTapListener() {
163 | @Override
164 | public void onViewTap(View arg0, float arg1, float arg2) {
165 | is_touch = true;
166 | viewpager.setVisibility(View.GONE);
167 | showimg.setVisibility(View.VISIBLE);
168 | setShowimage();
169 | }
170 | });
171 |
172 | container.addView(photoView, LayoutParams.MATCH_PARENT,
173 | LayoutParams.MATCH_PARENT);
174 |
175 | return photoView;
176 | }
177 |
178 | @Override
179 | public void destroyItem(ViewGroup container, int position, Object object) {
180 | container.removeView((View) object);
181 | }
182 |
183 | @Override
184 | public boolean isViewFromObject(View view, Object object) {
185 | return view == object;
186 | }
187 | }
188 |
189 | private class AnimateFirstDisplayListener extends
190 | SimpleImageLoadingListener {
191 |
192 | final List displayedImages = Collections
193 | .synchronizedList(new LinkedList());
194 |
195 | @Override
196 | public void onLoadingComplete(String imageUri, View view,
197 | Bitmap loadedImage) {
198 | if (loadedImage != null) {
199 | ImageView imageView = (ImageView) view;
200 | imageView.setImageBitmap(loadedImage);
201 | boolean firstDisplay = !displayedImages.contains(imageUri);
202 | if (firstDisplay) {
203 | displayedImages.add(imageUri);
204 | }
205 | }
206 | Barview.setVisibility(View.GONE);
207 | }
208 |
209 | @Override
210 | public void onLoadingStarted(String imageUri, View view) {
211 | super.onLoadingStarted(imageUri, view);
212 | Barview.setVisibility(View.VISIBLE);
213 | }
214 | }
215 |
216 | @Override
217 | public boolean onKeyDown(int keyCode, KeyEvent event) {
218 | if (keyCode == KeyEvent.KEYCODE_BACK) {
219 | if (viewpager.getVisibility() == View.VISIBLE) {
220 | is_touch = true;
221 | viewpager.setVisibility(View.GONE);
222 | showimg.setVisibility(View.VISIBLE);
223 | setShowimage();
224 | }
225 | }
226 | return true;
227 | }
228 |
229 | @Override
230 | protected void EndSoring() {
231 | super.EndSoring();
232 | viewpager.setVisibility(View.VISIBLE);
233 | new Handler().postDelayed(new Runnable() {
234 | public void run() {
235 | //execute the task
236 | if (!is_touch){
237 | showimg.setVisibility(View.GONE);
238 | }
239 | }
240 | }, 300);
241 | }
242 |
243 | @Override
244 | protected void EndMove() {
245 | super.EndMove();
246 | finish();
247 | }
248 |
249 | private void AddInstructionsView() {
250 | for (int i = 0; i < ImgList.size(); i++) {
251 | View addview = new View(PreviewImage.this);
252 | addview.setBackgroundColor(0xffffffff);
253 | LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(dip2px(5), dip2px(5));
254 | addview.setLayoutParams(p);
255 | p.setMargins(dip2px(5), 0, 0, 0);
256 | AddLayout.addView(addview);
257 | }
258 | }
259 |
260 | }
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/dwcorephoto/SingleShow.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.dwcorephoto;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 | import android.view.MenuItem;
6 | import android.view.View;
7 | import android.widget.ImageView;
8 |
9 | import java.io.Serializable;
10 | import java.util.ArrayList;
11 |
12 | import davidwang.tm.model.ImageBDInfo;
13 | import davidwang.tm.model.ImageInfo;
14 | import davidwang.tm.tools.ImageLoaders;
15 |
16 |
17 | public class SingleShow extends BaseActivity implements View.OnClickListener{
18 |
19 |
20 | private ImageView show_img;
21 | private ArrayList data;
22 |
23 | @Override
24 | protected void onCreate(Bundle savedInstanceState) {
25 | super.onCreate(savedInstanceState);
26 | setContentView(R.layout.activity_single_show);
27 | findID();
28 | Listener();
29 | AddToolbar();
30 | }
31 |
32 | @Override
33 | protected void findID() {
34 | super.findID();
35 | data = new ArrayList();
36 | bdInfo = new ImageBDInfo();
37 | imageInfo = new ImageInfo();
38 | imageInfo.width = 1280;
39 | imageInfo.height = 720;
40 | imageInfo.url = "http://img4q.duitang.com/uploads/item/201408/11/20140811141753_iNtAF.jpeg";
41 | data.add(imageInfo);
42 | show_img = (ImageView)findViewById(R.id.show_img);
43 | ImageLoaders.setsendimg(imageInfo.url, show_img);
44 | }
45 |
46 | @Override
47 | protected void Listener() {
48 | super.Listener();
49 | show_img.setOnClickListener(this);
50 | }
51 |
52 | @Override
53 | public void onClick(View v) {
54 | switch (v.getId()){
55 | case R.id.show_img:
56 | bdInfo.x = show_img.getLeft();
57 | bdInfo.y = show_img.getTop();
58 | bdInfo.width = show_img.getLayoutParams().width;
59 | bdInfo.height = show_img.getLayoutParams().height;
60 | Intent intent = new Intent(SingleShow.this, PreviewImage.class);
61 | intent.putExtra("data", (Serializable) data);
62 | intent.putExtra("bdinfo",bdInfo);
63 | intent.putExtra("index",0);
64 | startActivity(intent);
65 | break;
66 | }
67 | }
68 |
69 | @Override
70 | public boolean onOptionsItemSelected(MenuItem item) {
71 | switch (item.getItemId()) {
72 | case android.R.id.home:
73 | finish();
74 | break;
75 | }
76 | return super.onOptionsItemSelected(item);
77 | }
78 |
79 |
80 | }
81 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/model/DialogueInfo.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.model;
2 |
3 | /**
4 | * Created by DavidWang on 16/4/28.
5 | */
6 | public class DialogueInfo {
7 |
8 | public String leftname;
9 | public String rightname;
10 | public String content;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/model/ImageBDInfo.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.model;
2 |
3 | import java.io.Serializable;
4 |
5 | /**
6 | * Created by DavidWang on 15/8/31.
7 | */
8 | public class ImageBDInfo implements Serializable{
9 |
10 | public float x;
11 | public float y;
12 | public float width;
13 | public float height;
14 |
15 | @Override
16 | public String toString() {
17 | return "ImageBDInfo{" +
18 | "x=" + x +
19 | ", y=" + y +
20 | ", width=" + width +
21 | ", height=" + height +
22 | '}';
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/model/ImageInfo.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.model;
2 |
3 | import java.io.Serializable;
4 |
5 | /**
6 | * Created by DavidWang on 15/8/31.
7 | */
8 | public class ImageInfo implements Serializable {
9 |
10 | public String url;
11 | //高清图
12 | public String hdurl;
13 | public float width;
14 | public float height;
15 |
16 | @Override
17 | public String toString() {
18 | return "ImageInfo{" +
19 | "url='" + url + '\'' +
20 | ", width=" + width +
21 | ", height=" + height +
22 | '}';
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/model/MainInfo.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.model;
2 |
3 | /**
4 | * Created by DavidWang on 15/8/25.
5 | */
6 | public class MainInfo {
7 | public String content;
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/model/Mixinfo.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.model;
2 |
3 | import java.io.Serializable;
4 | import java.util.ArrayList;
5 |
6 | /**
7 | * Created by DavidWang on 15/10/9.
8 | */
9 | public class Mixinfo implements Serializable {
10 |
11 | public String username;
12 | public String content;
13 | public String userimg;
14 | public boolean is_select = false;
15 | public ArrayList data;
16 | public ArrayList dialogdata;
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/tools/ImageLoaders.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.tools;
2 |
3 | import android.graphics.Bitmap;
4 | import android.widget.ImageView;
5 |
6 | import com.nostra13.universalimageloader.core.DisplayImageOptions;
7 | import com.nostra13.universalimageloader.core.ImageLoader;
8 | import com.nostra13.universalimageloader.core.assist.ImageScaleType;
9 | import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
10 | import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
11 |
12 | public class ImageLoaders {
13 |
14 | public static DisplayImageOptions optionstop = null;
15 | public static DisplayImageOptions options = null;
16 | public static DisplayImageOptions sendoptions = null;
17 | public static DisplayImageOptions dailyfines = null;
18 |
19 | public static void setheadimg(int dis, String url, ImageView imageView) {
20 | if (options == null) {
21 | options = new DisplayImageOptions.Builder().showImageOnLoading(0)
22 | .showImageForEmptyUri(0).showImageOnFail(0)
23 | .cacheInMemory(true).cacheOnDisk(true)
24 | .considerExifParams(true)
25 | .displayer(new RoundedBitmapDisplayer(dis)).build();
26 | }
27 |
28 | ImageLoader.getInstance().displayImage(url, imageView, options);
29 | }
30 |
31 | public static void settopimg(int dis, String url, ImageView imageView) {
32 |
33 | if (optionstop == null) {
34 | optionstop = new DisplayImageOptions.Builder()
35 | .showImageOnLoading(0).showImageForEmptyUri(0)
36 | .showImageOnFail(0)
37 | .cacheInMemory(true)
38 | .cacheOnDisk(true)
39 | .considerExifParams(true)
40 | .displayer(new RoundedBitmapDisplayer(dis)).build();
41 | }
42 |
43 | ImageLoader.getInstance().displayImage(url, imageView, optionstop);
44 |
45 | }
46 |
47 | public static void setsendimg(String url, ImageView imageView) {
48 | if (sendoptions == null) {
49 | sendoptions = new DisplayImageOptions.Builder()
50 | .showImageOnLoading(0)
51 | .showImageForEmptyUri(0)
52 | .showImageOnFail(0)
53 | .cacheInMemory(true)
54 | .cacheOnDisk(true)
55 | .considerExifParams(true)
56 | .bitmapConfig(Bitmap.Config.RGB_565)
57 | .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
58 | .build();
59 | }
60 |
61 | ImageLoader.getInstance().displayImage(url, imageView, sendoptions);
62 | }
63 |
64 | public static void setdailyfineimg(String url, ImageView imageView,
65 | ImageLoadingListener listener) {
66 | if (dailyfines == null) {
67 | dailyfines = new DisplayImageOptions.Builder()
68 | .showImageOnLoading(0)
69 | .showImageForEmptyUri(0)
70 | .showImageOnFail(0)
71 | .cacheInMemory(true)
72 | // .cacheOnDisk(true)
73 | .considerExifParams(true)
74 | .bitmapConfig(Bitmap.Config.RGB_565)
75 | .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
76 | .build();
77 | }
78 |
79 | ImageLoader.getInstance().displayImage(url, imageView, dailyfines,
80 | listener);
81 | }
82 |
83 | public static void sethdimg(String url, ImageView imageView,
84 | ImageLoadingListener listener) {
85 | if (dailyfines == null) {
86 | dailyfines = new DisplayImageOptions.Builder()
87 | .showImageOnLoading(0)
88 | .showImageForEmptyUri(0)
89 | .showImageOnFail(0)
90 | .cacheInMemory(true)
91 | .cacheOnDisk(true)
92 | .considerExifParams(true)
93 | .bitmapConfig(Bitmap.Config.RGB_565)
94 | .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
95 | .build();
96 | }
97 |
98 | ImageLoader.getInstance().displayImage(url, imageView, dailyfines,
99 | listener);
100 | }
101 |
102 | }
103 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/view/HackyViewPager.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.view;
2 |
3 | import android.content.Context;
4 | import android.support.v4.view.ViewPager;
5 | import android.util.AttributeSet;
6 | import android.view.MotionEvent;
7 |
8 | /**
9 | * Found at http://stackoverflow.com/questions/7814017/is-it-possible-to-disable-scrolling-on-a-viewpager.
10 | * Convenient way to temporarily disable ViewPager navigation while interacting with ImageView.
11 | *
12 | * Julia Zudikova
13 | */
14 |
15 | /**
16 | * Hacky fix for Issue #4 and
17 | * http://code.google.com/p/android/issues/detail?id=18990
18 | *
19 | * ScaleGestureDetector seems to mess up the touch events, which means that
20 | * ViewGroups which make use of onInterceptTouchEvent throw a lot of
21 | * IllegalArgumentException: pointerIndex out of range.
22 | *
23 | * There's not much I can do in my code for now, but we can mask the result by
24 | * just catching the problem and ignoring it.
25 | *
26 | * @author Chris Banes
27 | */
28 | public class HackyViewPager extends ViewPager {
29 |
30 | private boolean isLocked;
31 |
32 | public HackyViewPager(Context context) {
33 | super(context);
34 | isLocked = false;
35 | }
36 |
37 | public HackyViewPager(Context context, AttributeSet attrs) {
38 | super(context, attrs);
39 | isLocked = false;
40 | }
41 |
42 | @Override
43 | public boolean onInterceptTouchEvent(MotionEvent ev) {
44 | if (!isLocked) {
45 | try {
46 | return super.onInterceptTouchEvent(ev);
47 | } catch (IllegalArgumentException e) {
48 | e.printStackTrace();
49 | return false;
50 | }
51 | }
52 | return false;
53 | }
54 |
55 | @Override
56 | public boolean onTouchEvent(MotionEvent event) {
57 | if (!isLocked) {
58 | return super.onTouchEvent(event);
59 | }
60 | return false;
61 | }
62 |
63 | public void toggleLock() {
64 | isLocked = !isLocked;
65 | }
66 |
67 | public void setLocked(boolean isLocked) {
68 | this.isLocked = isLocked;
69 | }
70 |
71 | public boolean isLocked() {
72 | return isLocked;
73 | }
74 |
75 | }
76 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/view/KeyboardLayout.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.view;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.util.Log;
6 | import android.widget.RelativeLayout;
7 |
8 | /**
9 | * Created by DavidWang on 15/12/24.
10 | */
11 | public class KeyboardLayout extends RelativeLayout {
12 | private static final String TAG = KeyboardLayout.class.getSimpleName();
13 | public static final byte KEYBOARD_STATE_SHOW = -3;
14 | public static final byte KEYBOARD_STATE_HIDE = -2;
15 | public static final byte KEYBOARD_STATE_INIT = -1;
16 | private boolean mHasInit;
17 | private boolean mHasKeybord = false;
18 | private int mHeight;
19 | private onKybdsChangeListener mListener;
20 |
21 | public KeyboardLayout(Context context, AttributeSet attrs, int defStyle) {
22 | super(context, attrs, defStyle);
23 | }
24 |
25 | public KeyboardLayout(Context context, AttributeSet attrs) {
26 | super(context, attrs);
27 | }
28 |
29 | public KeyboardLayout(Context context) {
30 | super(context);
31 | }
32 | /**
33 | * set keyboard state listener
34 | */
35 | public void setOnkbdStateListener(onKybdsChangeListener listener){
36 | mListener = listener;
37 | }
38 | @Override
39 | protected void onLayout(boolean changed, int l, int t, int r, int b) {
40 | super.onLayout(changed, l, t, r, b);
41 | if (!mHasInit) {
42 | mHasInit = true;
43 | mHeight = b;
44 | // if (mListener != null) {
45 | // mListener.onKeyBoardStateChange(KEYBOARD_STATE_INIT);
46 | // }
47 | } else {
48 | mHeight = mHeight < b ? b : mHeight;
49 | }
50 | if (mHasInit && mHeight > b) {
51 | mHasKeybord = true;
52 | // if (mListener != null) {
53 | // mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW);
54 | // }
55 | Log.w(TAG, "show keyboard.......");
56 | }
57 | if (mHasInit && mHasKeybord && mHeight == b) {
58 | mHasKeybord = false;
59 | if (mListener != null) {
60 | mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE);
61 | }
62 | Log.w(TAG, "hide keyboard.......");
63 | }
64 | }
65 |
66 | @Override
67 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
68 | final int proposedHeight = MeasureSpec.getSize(heightMeasureSpec);
69 | final int actualHeight = getHeight();
70 |
71 | if (actualHeight > proposedHeight) {
72 | if (!mHasKeybord) {
73 | mHasKeybord = true;
74 | if (mListener != null) {
75 | mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW);
76 | }
77 | }
78 |
79 | } else {
80 | if (mHasKeybord){
81 | // mHasKeybord = false;
82 | // if (mListener != null) {
83 | // mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE);
84 | // }
85 | }
86 | }
87 |
88 | super.onMeasure(widthMeasureSpec, heightMeasureSpec);
89 | }
90 |
91 | public interface onKybdsChangeListener{
92 | public void onKeyBoardStateChange(int state);
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/view/PullToZoomListView.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.view;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.os.SystemClock;
6 | import android.util.AttributeSet;
7 | import android.util.DisplayMetrics;
8 | import android.view.MotionEvent;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.view.animation.Interpolator;
12 | import android.widget.AbsListView;
13 | import android.widget.ImageView;
14 | import android.widget.ListView;
15 | import android.widget.RelativeLayout;
16 |
17 | import davidwang.tm.dwcorephoto.R;
18 | import davidwang.tm.tools.ImageLoaders;
19 |
20 | /**
21 | * Created by DavidWang on 15/10/8.
22 | */
23 | public class PullToZoomListView extends ListView implements
24 | AbsListView.OnScrollListener {
25 | private static final int INVALID_VALUE = -1;
26 | private static final String TAG = "PullToZoomListView";
27 | private static final Interpolator sInterpolator = new Interpolator() {
28 | public float getInterpolation(float paramAnonymousFloat) {
29 | float f = paramAnonymousFloat - 1.0F;
30 | return 1.0F + f * (f * (f * (f * f)));
31 | }
32 | };
33 | int mActivePointerId = -1;
34 | private RelativeLayout mHeaderContainer;
35 | private int mHeaderHeight;
36 | private ImageView mHeaderImage;
37 | float mLastMotionY = -1.0F;
38 | float mLastScale = -1.0F;
39 | float mMaxScale = -1.0F;
40 | private AbsListView.OnScrollListener mOnScrollListener;
41 | private ScalingRunnalable mScalingRunnalable;
42 | private int mScreenHeight;
43 | private BackTouchEvent event;
44 |
45 | public PullToZoomListView(Context paramContext) {
46 | super(paramContext);
47 | init(paramContext);
48 | }
49 |
50 | public PullToZoomListView(Context paramContext,
51 | AttributeSet paramAttributeSet) {
52 | super(paramContext, paramAttributeSet);
53 | init(paramContext);
54 | }
55 |
56 | public PullToZoomListView(Context paramContext,
57 | AttributeSet paramAttributeSet, int paramInt) {
58 | super(paramContext, paramAttributeSet, paramInt);
59 | init(paramContext);
60 | }
61 |
62 | public void setTouchEvent(BackTouchEvent event){
63 | this.event = event;
64 | }
65 |
66 | private void endScraling() {
67 | if (this.mHeaderContainer.getBottom() >= this.mHeaderHeight)
68 | this.mScalingRunnalable.startAnimation(200L);
69 | }
70 |
71 | private void init(Context paramContext) {
72 | DisplayMetrics localDisplayMetrics = new DisplayMetrics();
73 | ((Activity) paramContext).getWindowManager().getDefaultDisplay()
74 | .getMetrics(localDisplayMetrics);
75 | this.mScreenHeight = localDisplayMetrics.heightPixels;
76 |
77 | this.mHeaderContainer = (RelativeLayout) View.inflate(paramContext, R.layout.mixshow_headview, null);
78 | this.mHeaderImage = (ImageView)this.mHeaderContainer.findViewById(R.id.maxshowimg);
79 | ImageView userview = (ImageView)mHeaderContainer.findViewById(R.id.userimg);
80 | // this.mHeaderImage.setBackgroundResource(R.mipmap.ic_launcher);
81 | ImageLoaders.setsendimg("http://imgsrc.baidu.com/forum/pic/item/8b82b9014a90f603fa18d50f3912b31bb151edca.jpg", userview);
82 | int i = localDisplayMetrics.widthPixels;
83 | setHeaderViewSize(i, (int) (9.0F * (i / 12.0F)));
84 | // this.mHeaderContainer.addView(this.mHeaderImage);
85 | addHeaderView(this.mHeaderContainer);
86 | this.mScalingRunnalable = new ScalingRunnalable();
87 | super.setOnScrollListener(this);
88 | }
89 |
90 | private void onSecondaryPointerUp(MotionEvent paramMotionEvent) {
91 | int i = (paramMotionEvent.getAction()) >> 8;
92 | if (paramMotionEvent.getPointerId(i) == this.mActivePointerId)
93 | if (i != 0) {
94 | int j = 1;
95 | this.mLastMotionY = paramMotionEvent.getY(0);
96 | this.mActivePointerId = paramMotionEvent.getPointerId(0);
97 | return;
98 | }
99 | }
100 |
101 | private void reset() {
102 | this.mActivePointerId = -1;
103 | this.mLastMotionY = -1.0F;
104 | this.mMaxScale = -1.0F;
105 | this.mLastScale = -1.0F;
106 | }
107 |
108 | public ImageView getHeaderView() {
109 | return this.mHeaderImage;
110 | }
111 |
112 | public boolean onInterceptTouchEvent(MotionEvent paramMotionEvent) {
113 | return super.onInterceptTouchEvent(paramMotionEvent);
114 | }
115 |
116 | protected void onLayout(boolean paramBoolean, int paramInt1, int paramInt2,
117 | int paramInt3, int paramInt4) {
118 | super.onLayout(paramBoolean, paramInt1, paramInt2, paramInt3, paramInt4);
119 | if (this.mHeaderHeight == 0)
120 | this.mHeaderHeight = this.mHeaderContainer.getHeight();
121 | }
122 |
123 | @Override
124 | public void onScroll(AbsListView paramAbsListView, int paramInt1,
125 | int paramInt2, int paramInt3) {
126 | float f = this.mHeaderHeight - this.mHeaderContainer.getBottom();
127 | if ((f > 0.0F) && (f < this.mHeaderHeight)) {
128 | int i = (int) (0.65D * f);
129 | this.mHeaderImage.scrollTo(0, -i);
130 | } else if (this.mHeaderImage.getScrollY() != 0) {
131 | this.mHeaderImage.scrollTo(0, 0);
132 | }
133 | if (this.mOnScrollListener != null) {
134 | this.mOnScrollListener.onScroll(paramAbsListView, paramInt1,
135 | paramInt2, paramInt3);
136 | }
137 | }
138 |
139 | public void onScrollStateChanged(AbsListView paramAbsListView, int paramInt) {
140 | if (this.mOnScrollListener != null)
141 | this.mOnScrollListener.onScrollStateChanged(paramAbsListView,
142 | paramInt);
143 | }
144 |
145 | public boolean onTouchEvent(MotionEvent paramMotionEvent) {
146 | event.OnTouchEvent();
147 | switch (0xFF & paramMotionEvent.getAction()) {
148 | case 4:
149 | case 0:
150 | if (!this.mScalingRunnalable.mIsFinished) {
151 | this.mScalingRunnalable.abortAnimation();
152 | }
153 | this.mLastMotionY = paramMotionEvent.getY();
154 | this.mActivePointerId = paramMotionEvent.getPointerId(0);
155 | this.mMaxScale = (this.mScreenHeight / this.mHeaderHeight);
156 | this.mLastScale = (this.mHeaderContainer.getBottom() / this.mHeaderHeight);
157 | break;
158 | case 2:
159 | int j = paramMotionEvent.findPointerIndex(this.mActivePointerId);
160 | if (j == -1) {
161 | } else {
162 | if (this.mLastMotionY == -1.0F)
163 | this.mLastMotionY = paramMotionEvent.getY(j);
164 | if (this.mHeaderContainer.getBottom() >= this.mHeaderHeight) {
165 | ViewGroup.LayoutParams localLayoutParams = this.mHeaderContainer
166 | .getLayoutParams();
167 | float f = ((paramMotionEvent.getY(j) - this.mLastMotionY + this.mHeaderContainer
168 | .getBottom()) / this.mHeaderHeight - this.mLastScale)
169 | / 2.0F + this.mLastScale;
170 | if ((this.mLastScale <= 1.0D) && (f < this.mLastScale)) {
171 | localLayoutParams.height = this.mHeaderHeight;
172 | this.mHeaderContainer
173 | .setLayoutParams(localLayoutParams);
174 | return super.onTouchEvent(paramMotionEvent);
175 | }
176 | this.mLastScale = Math.min(Math.max(f, 1.0F),
177 | this.mMaxScale);
178 | localLayoutParams.height = ((int) (this.mHeaderHeight * this.mLastScale));
179 | if (localLayoutParams.height < this.mScreenHeight)
180 | this.mHeaderContainer
181 | .setLayoutParams(localLayoutParams);
182 | this.mLastMotionY = paramMotionEvent.getY(j);
183 | return true;
184 | }
185 | this.mLastMotionY = paramMotionEvent.getY(j);
186 | }
187 | break;
188 | case 1:
189 | reset();
190 | endScraling();
191 | break;
192 | case 3:
193 | int i = paramMotionEvent.getActionIndex();
194 | this.mLastMotionY = paramMotionEvent.getY(i);
195 | this.mActivePointerId = paramMotionEvent.getPointerId(i);
196 | break;
197 | case 5:
198 | onSecondaryPointerUp(paramMotionEvent);
199 | this.mLastMotionY = paramMotionEvent.getY(paramMotionEvent
200 | .findPointerIndex(this.mActivePointerId));
201 | break;
202 | case 6:
203 | }
204 | return super.onTouchEvent(paramMotionEvent);
205 | }
206 |
207 | public void setHeaderViewSize(int paramInt1, int paramInt2) {
208 | Object localObject = this.mHeaderContainer.getLayoutParams();
209 | if (localObject == null)
210 | localObject = new AbsListView.LayoutParams(paramInt1, paramInt2);
211 | ((ViewGroup.LayoutParams) localObject).width = paramInt1;
212 | ((ViewGroup.LayoutParams) localObject).height = paramInt2;
213 | this.mHeaderContainer
214 | .setLayoutParams((ViewGroup.LayoutParams) localObject);
215 | this.mHeaderHeight = paramInt2;
216 | }
217 |
218 | public void setOnScrollListener(
219 | AbsListView.OnScrollListener paramOnScrollListener) {
220 | this.mOnScrollListener = paramOnScrollListener;
221 | }
222 |
223 | // public void setShadow(int paramInt) {
224 | // this.mShadow.setBackgroundResource(paramInt);
225 | // }
226 |
227 | class ScalingRunnalable implements Runnable {
228 | long mDuration;
229 | boolean mIsFinished = true;
230 | float mScale;
231 | long mStartTime;
232 |
233 | ScalingRunnalable() {
234 | }
235 |
236 | public void abortAnimation() {
237 | this.mIsFinished = true;
238 | }
239 |
240 | public boolean isFinished() {
241 | return this.mIsFinished;
242 | }
243 |
244 | public void run() {
245 | float f2;
246 | ViewGroup.LayoutParams localLayoutParams;
247 | if ((!this.mIsFinished) && (this.mScale > 1.0D)) {
248 | float f1 = ((float) SystemClock.currentThreadTimeMillis() - (float) this.mStartTime)
249 | / (float) this.mDuration;
250 | f2 = this.mScale - (this.mScale - 1.0F)
251 | * PullToZoomListView.sInterpolator.getInterpolation(f1);
252 | localLayoutParams = PullToZoomListView.this.mHeaderContainer
253 | .getLayoutParams();
254 | if (f2 > 1.0F) {
255 | localLayoutParams.height = PullToZoomListView.this.mHeaderHeight;
256 | localLayoutParams.height = ((int) (f2 * PullToZoomListView.this.mHeaderHeight));
257 | PullToZoomListView.this.mHeaderContainer
258 | .setLayoutParams(localLayoutParams);
259 | PullToZoomListView.this.post(this);
260 | return;
261 | }
262 | this.mIsFinished = true;
263 | }
264 | }
265 |
266 | public void startAnimation(long paramLong) {
267 | this.mStartTime = SystemClock.currentThreadTimeMillis();
268 | this.mDuration = paramLong;
269 | this.mScale = ((float) (PullToZoomListView.this.mHeaderContainer
270 | .getBottom()) / PullToZoomListView.this.mHeaderHeight);
271 | this.mIsFinished = false;
272 | PullToZoomListView.this.post(this);
273 | }
274 | }
275 |
276 | public interface BackTouchEvent {
277 | /**
278 | * @return whether the adapter was set or not.
279 | */
280 | public void OnTouchEvent();
281 | }
282 | }
283 |
--------------------------------------------------------------------------------
/app/src/main/java/davidwang/tm/view/SquareLayout.java:
--------------------------------------------------------------------------------
1 | package davidwang.tm.view;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.widget.RelativeLayout;
6 |
7 | /**
8 | * Created by DavidWang on 15/9/6.
9 | */
10 | public class SquareLayout extends RelativeLayout {
11 |
12 | public SquareLayout(Context context, AttributeSet attrs, int defStyle) {
13 | super(context, attrs, defStyle);
14 | }
15 |
16 | public SquareLayout(Context context, AttributeSet attrs) {
17 | super(context, attrs);
18 | }
19 |
20 | public SquareLayout(Context context) {
21 | super(context);
22 | }
23 |
24 | @SuppressWarnings("unused")
25 | @Override
26 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
27 | // For simple implementation, or internal size is always 0.
28 | // We depend on the container to specify the layout size of
29 | // our view. We can't really know what it is since we will be
30 | // adding and removing different arbitrary views and do not
31 | // want the layout to change as this happens.
32 | setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));
33 |
34 | // Children are just made to fill our space.
35 | int childWidthSize = getMeasuredWidth();
36 | int childHeightSize = getMeasuredHeight();
37 | //高度和宽度一样
38 | heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);
39 | super.onMeasure(widthMeasureSpec, heightMeasureSpec);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/click_content.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_browseimage.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
14 |
15 |
16 |
17 |
25 |
30 |
31 |
32 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_grid_view.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
15 |
16 |
17 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_list_view.xml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
17 |
18 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
18 |
19 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_mix_show.xml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
18 |
19 |
30 |
31 |
32 |
39 |
40 |
52 |
53 |
62 |
63 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_show_image.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_single_show.xml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
18 |
19 |
20 |
29 |
30 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/evaluation_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
17 |
24 |
25 |
29 |
30 |
39 |
40 |
46 |
47 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/grid_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/list_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/main_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
13 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/mix_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
22 |
23 |
35 |
36 |
47 |
48 |
55 |
56 |
64 |
65 |
74 |
75 |
81 |
82 |
89 |
90 |
97 |
98 |
105 |
106 |
114 |
115 |
123 |
124 |
131 |
132 |
140 |
141 |
149 |
150 |
151 |
152 |
153 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/mixshow_headview.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
15 |
16 |
17 |
27 |
28 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/waiting_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_grid_view.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_list_view.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_mix_show.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_show_image.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_single_show.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/mixheadimg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/app/src/main/res/mipmap-hdpi/mixheadimg.jpeg
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/userimg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/app/src/main/res/mipmap-hdpi/userimg.jpg
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #009688
4 | #00796B
5 | #FD87A9
6 |
7 | #f2f2f2
8 | #b2b2b2
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 0dp
4 | 0dp
5 |
6 |
7 | 44dp
8 | 18dp
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | DWCorePhoto
3 |
4 | Hello world!
5 | Settings
6 | SingleShow
7 | ShowImageActivity
8 | ListViewActivity
9 | GridViewActivity
10 | MixShowActivity
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
19 |
20 |
23 |
24 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:1.2.3'
9 |
10 | // NOTE: Do not place your application dependencies here; they belong
11 | // in the individual module build.gradle files
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | jcenter()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | ## Project-wide Gradle settings.
2 | #
3 | # For more details on how to configure your build environment visit
4 | # http://www.gradle.org/docs/current/userguide/build_environment.html
5 | #
6 | # Specifies the JVM arguments used for the daemon process.
7 | # The setting is particularly useful for tweaking memory settings.
8 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
9 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
10 | #
11 | # When configured, Gradle will run in incubating parallel mode.
12 | # This option should only be used with decoupled projects. More details, visit
13 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
14 | # org.gradle.parallel=true
15 | #Tue Aug 25 17:33:13 CST 2015
16 | systemProp.http.proxyHost=hx.gy
17 | systemProp.http.proxyPort=1080
18 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DavidWangTM/DWCorePhoto_Android/d8b8cda500e4809bccc16c3d48d1d85f1ac2d709/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Aug 25 17:22:53 CST 2015
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # For Cygwin, ensure paths are in UNIX format before anything is touched.
46 | if $cygwin ; then
47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
48 | fi
49 |
50 | # Attempt to set APP_HOME
51 | # Resolve links: $0 may be a link
52 | PRG="$0"
53 | # Need this for relative symlinks.
54 | while [ -h "$PRG" ] ; do
55 | ls=`ls -ld "$PRG"`
56 | link=`expr "$ls" : '.*-> \(.*\)$'`
57 | if expr "$link" : '/.*' > /dev/null; then
58 | PRG="$link"
59 | else
60 | PRG=`dirname "$PRG"`"/$link"
61 | fi
62 | done
63 | SAVED="`pwd`"
64 | cd "`dirname \"$PRG\"`/" >&-
65 | APP_HOME="`pwd -P`"
66 | cd "$SAVED" >&-
67 |
68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
69 |
70 | # Determine the Java command to use to start the JVM.
71 | if [ -n "$JAVA_HOME" ] ; then
72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
73 | # IBM's JDK on AIX uses strange locations for the executables
74 | JAVACMD="$JAVA_HOME/jre/sh/java"
75 | else
76 | JAVACMD="$JAVA_HOME/bin/java"
77 | fi
78 | if [ ! -x "$JAVACMD" ] ; then
79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
80 |
81 | Please set the JAVA_HOME variable in your environment to match the
82 | location of your Java installation."
83 | fi
84 | else
85 | JAVACMD="java"
86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
87 |
88 | Please set the JAVA_HOME variable in your environment to match the
89 | location of your Java installation."
90 | fi
91 |
92 | # Increase the maximum file descriptors if we can.
93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
94 | MAX_FD_LIMIT=`ulimit -H -n`
95 | if [ $? -eq 0 ] ; then
96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
97 | MAX_FD="$MAX_FD_LIMIT"
98 | fi
99 | ulimit -n $MAX_FD
100 | if [ $? -ne 0 ] ; then
101 | warn "Could not set maximum file descriptor limit: $MAX_FD"
102 | fi
103 | else
104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
105 | fi
106 | fi
107 |
108 | # For Darwin, add options to specify how the application appears in the dock
109 | if $darwin; then
110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
111 | fi
112 |
113 | # For Cygwin, switch paths to Windows format before running java
114 | if $cygwin ; then
115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
158 | function splitJvmOpts() {
159 | JVM_OPTS=("$@")
160 | }
161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
163 |
164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
165 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------