我是靠谱客的博主 重要火龙果,这篇文章主要介绍基于eclipse的android项目实战—博学谷(新功能五)更换头像,现在分享给大家,希望可以做个参考。

在前面博学谷项目的基础上进行改善和增加新功能

源码资源下载:https://download.csdn.net/download/hyh17808770899/19844673
在这里插入图片描述


博学谷的第五个新功能:个人资料界面点击用户头像可以通过拍照和相册选择更换头像
在这里插入图片描述

1、个人资料界面添加更换头像的点击事件和头像显示代码

china.ynyx.heyunhui.activity包中的UserInfoActivity.java文件中添加代码

①58行:定义私有变量

复制代码
1
2
3
4
5
6
private ImageView iv_head_icon; private static String path = "/sdcard/DemoHead/";//sd路径 private Bitmap head;//头像Bitmap private Context context = this; Bitmap bt = BitmapFactory.decodeFile(path + "head.jpg");//从Sd中找头像,转换成Bitmap

②78行:调动头像显示

复制代码
1
2
imagehead();

③93行:头像显示代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void imagehead() { // TODO Auto-generated method stub if(bt!=null){ iv_head_icon.setImageBitmap(bt); }else{ /** * 如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中 */ iv_head_icon.setImageResource(R.drawable.default_icon); } rl_head.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ActionSheetDialog(); } }); }

④120行:初始化控件

复制代码
1
2
iv_head_icon =(ImageView) findViewById(R.id.iv_head_icon);

⑤268行:拍照和相册选择的点击事件:

复制代码
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
//相机拍照后的返回结果 case 3: if (resultCode == RESULT_OK) { File temp = new File(Environment.getExternalStorageDirectory() + "/head.jpg"); cropPhoto(Uri.fromFile(temp));//裁剪图片 } break; //从相册里面取相片的返回结果 case 4: if (resultCode == RESULT_OK) { cropPhoto(data.getData());//裁剪图片 } break; //调用系统裁剪图片后 case 5: if (data != null) { Bundle extras = data.getExtras(); head = extras.getParcelable("data"); if (head != null) { /** * 上传服务器代码 */ setPicToView(head);//保存在SD卡中 iv_head_icon.setImageBitmap(head);//用ImageView显示出来 } } break;

303行:

复制代码
1
2
super.onActivityResult(requestCode, resultCode, data);

⑥308行:拍照、相册、系统裁剪的具体实现代码:

复制代码
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
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
private void ActionSheetDialog() { final String[] stringItems = {"拍照", "从相册中选择", "图片商城"}; final ActionSheetDialog dialog = new ActionSheetDialog(context, stringItems, null); dialog.title("请选择头像更换方式")// .titleTextSize_SP(14.5f)// .show(); dialog.setOnOperItemClickL(new OnOperItemClickL() { @Override public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == 0) {//调用相机拍照 T.showShort(context, stringItems[position]); //最好用try/catch包裹一下,防止因为用户未给应用程序开启相机权限,而使程序崩溃 try { Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//开启相机应用程序获取并返回图片(capture:俘获) intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "head.jpg")));//指明存储图片或视频的地址URI startActivityForResult(intent1, 3);//采用ForResult打开 } catch (Exception e) { Toast.makeText(UserInfoActivity.this, "相机无法启动,请先开启相机权限", Toast.LENGTH_LONG).show(); } dialog.dismiss(); }else if (position == 1) {//从相册里面取照片 T.showShort(context, stringItems[position]); Intent intent2 = new Intent(Intent.ACTION_PICK, null);//返回被选中项的URI intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");//得到所有图片的URI startActivityForResult(intent2, 4); dialog.dismiss(); }else if (position == 2) { T.showShort(context, stringItems[position]); Intent intent2 = new Intent(UserInfoActivity.this,PhotoWall.class); startActivityForResult(intent2, 0); dialog.dismiss(); } } }); } /** * 调用系统的裁剪 * * @param uri */ public void cropPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); //找到指定URI对应的资源图片 intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // aspectX aspectY 是裁剪框宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 150);// 输出图片大小 intent.putExtra("outputY", 150); intent.putExtra("return-data", true); //进入系统裁剪图片的界面 startActivityForResult(intent, 5); } private void setPicToView(Bitmap mBitmap) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd卡是否可用 return; } FileOutputStream b = null; File file = new File(path); file.mkdirs();// 创建以此File对象为名(path)的文件夹 String fileName = path + "head.jpg";//图片名字 try { b = new FileOutputStream(fileName); mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件(compress:压缩) } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { //关闭流 b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } }

2、“我”的界面头像显示

china.ynyx.heyunhui.view包中的MyInfoView.java文件中添加代码

①36行:定义

复制代码
1
2
private static String path = "/sdcard/DemoHead/";//sd路径

②130行:设置“我”的界面头像显示,登陆成功后显示修改后的头像

复制代码
1
2
3
4
5
6
7
8
9
10
11
Bitmap bt = BitmapFactory.decodeFile(path + "head.jpg");//从Sd中找头像,转换成Bitmap if(bt!=null){ iv_head_icon.setImageBitmap(bt); }else{ /** * 如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中 */ iv_head_icon.setImageResource(R.drawable.default_icon); }

145行:没有登录则显示默认头像

复制代码
1
2
iv_head_icon.setImageResource(R.drawable.default_icon);

3、修改配置文件

在AndroidManifest.xml包中的第14行添加如下代码:

复制代码
1
2
3
4
5
6
7
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="android.hardware.camera.autofocus"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

在AndroidManifest.xml包中更换App主题:
<application中将android:theme换成

复制代码
1
2
android:theme="@style/Theme.AppCompat.NoActionBar"

4、弹窗逻辑代码

在src目录下新建china.ynyx.heyunhui.dialog包,再在该包中新建更换头像时弹窗需要用到的java文件:
在这里插入图片描述
由于代码太多,这里就不一一展示了,需者自取:
https://yuyunyaohui.lanzoui.com/ilhz6qpnyve

添加库文件:更换头像弹窗所需要的库文件
https://yuyunyaohui.lanzoui.com/iKe6Xqpnole
在这里插入图片描述

5、弹窗样式

res目录下新建anim文件夹,在该文件夹中新建两个xml文件
dialog_enter.xml具体代码如下:

复制代码
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!-- %p指相对于父容器 --> <translate android:duration="500" android:fromYDelta="-100%p" /> </set>

dialog_exit.xml具体代码如下:

复制代码
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="500" android:toYDelta="-100%p" /> </set>

res目录下的layout文件夹中新建ac_dialog_home.xml文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?> <ExpandableListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/elv" android:background="#ffffff" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:divider="@null" android:fadingEdge="none" android:groupIndicator="@null" android:listSelector="#00000000" android:scrollbars="none" />

res目录下的values文件夹中的styles.xml中20行添加代码:

复制代码
1
2
3
4
5
6
7
<style name="myDialogAnim" parent="android:Animation"> <!-- 进入时的动画 --> <item name="@android:windowEnterAnimation">@anim/dialog_enter</item> <!-- 退出时的动画 --> <item name="@android:windowExitAnimation">@anim/dialog_exit</item> </style>

在这里插入图片描述


UserInfoActivity.java完整代码:

复制代码
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
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
package china.ynyx.heyunhui.activity; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import china.ynyx.heyunhui.PhotoWall; import china.ynyx.heyunhui.R; import china.ynyx.heyunhui.bean.UserBean; import china.ynyx.heyunhui.dialog.ActionSheetDialog; import china.ynyx.heyunhui.dialog.OnOperItemClickL; import china.ynyx.heyunhui.dialog.T; import china.ynyx.heyunhui.utils.AnalysisUtils; import china.ynyx.heyunhui.utils.DBUtils; public class UserInfoActivity extends AppCompatActivity implements OnClickListener{ private TextView tv_back; private TextView tv_main_title; private TextView tv_nickName, tv_signature, tv_user_name, tv_sex; private RelativeLayout rl_nickName, rl_sex, rl_signature, rl_title_bar,rl_head; private String spUserName; private static final int CHANGE_NICKNAME = 1;//修改昵称的自定义常量 private static final int CHANGE_SIGNATURE = 2;//修改个性签名的自定义常量 /*完成头像修改功能的代码---创新功能一*/ private ImageView iv_head_icon; private static String path = "/sdcard/DemoHead/";//sd路径 private Bitmap head;//头像Bitmap private Context context = this; Bitmap bt = BitmapFactory.decodeFile(path + "head.jpg");//从Sd中找头像,转换成Bitmap /*完成头像修改功能的代码---创新功能一*/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_info); //设置此界面为竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //从SharedPreferences中获取登录时的用户名 spUserName = AnalysisUtils.readLoginUserName(this); init(); initData(); setListener(); imagehead(); } /*头像显示代码*/ private void imagehead() { // TODO Auto-generated method stub if(bt!=null){ iv_head_icon.setImageBitmap(bt); }else{ /** * 如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中 */ iv_head_icon.setImageResource(R.drawable.default_icon); } rl_head.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ActionSheetDialog(); } }); } /*头像显示代码*/ /** * 初始化控件 */ private void init() { tv_back = (TextView) findViewById(R.id.tv_back); tv_main_title = (TextView) findViewById(R.id.tv_main_title); tv_main_title.setText("个人资料"); rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar); rl_title_bar.setBackgroundColor(Color.parseColor("#30B4FF")); rl_nickName = (RelativeLayout) findViewById(R.id.rl_nickName); rl_sex = (RelativeLayout) findViewById(R.id.rl_sex); rl_signature = (RelativeLayout) findViewById(R.id.rl_signature); tv_nickName = (TextView) findViewById(R.id.tv_nickName); tv_user_name = (TextView) findViewById(R.id.tv_user_name); tv_sex = (TextView) findViewById(R.id.tv_sex); tv_signature = (TextView) findViewById(R.id.tv_signature); rl_head = (RelativeLayout) findViewById(R.id.rl_head); /*完成头像修改功能的代码---创新功能一*/ iv_head_icon =(ImageView) findViewById(R.id.iv_head_icon); /*完成头像修改功能的代码---创新功能一*/ } /** * 获取数据 */ private void initData() { UserBean bean = null; bean = DBUtils.getInstance(this).getUserInfo(spUserName); // 首先判断一下数据库是否有数据 if (bean == null) { bean = new UserBean(); bean.userName=spUserName; bean.nickName="雨云耀辉"; bean.sex="男"; bean.signature="雨云耀辉"; // bean.sign_in="无"; //保存用户信息到数据库 DBUtils.getInstance(this).saveUserInfo(bean); } setValue(bean); } /** * 为界面控件设置值 */ private void setValue(UserBean bean) { tv_nickName.setText(bean.nickName); tv_user_name.setText(bean.userName); tv_sex.setText(bean.sex); tv_signature.setText(bean.signature); } /** * 设置控件的点击监听事件 */ private void setListener() { tv_back.setOnClickListener(this); rl_nickName.setOnClickListener(this); rl_sex.setOnClickListener(this); rl_signature.setOnClickListener(this); } /** * 控件的点击事件 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_back://返回键的点击事件 UserInfoActivity.this.finish(); break; case R.id.rl_nickName://昵称的点击事件 String name = tv_nickName.getText().toString();//获取昵称控件上的数据 Bundle bdName = new Bundle(); bdName.putString("content", name);//传递界面上的昵称数据 bdName.putString("title", "昵称"); bdName.putInt("flag", 1);//flag传递1时表示是修改昵称 enterActivityForResult(ChangeUserInfoActivity.class, CHANGE_NICKNAME, bdName);//跳转到个人资料修改界面 break; case R.id.rl_sex://性别的点击事件 String sex = tv_sex.getText().toString();//获取性别控件上的数据 sexDialog(sex); break; case R.id.rl_signature://签名的点击事件 String signature = tv_signature.getText().toString();//获取签名控件上的数据 Bundle bdSignature = new Bundle(); bdSignature.putString("content", signature);//传递界面上的签名数据 bdSignature.putString("title", "签名"); bdSignature.putInt("flag", 2);//flag传递2时表示是修改签名 enterActivityForResult(ChangeUserInfoActivity.class, CHANGE_SIGNATURE, bdSignature);//跳转到个人资料修改界面 break; default: break; } } /** * 设置性别的弹出框 */ private void sexDialog(String sex){ int sexFlag=0; if("男".equals(sex)){ sexFlag=0; }else if("女".equals(sex)){ sexFlag=1; } final String items[]={"男","女"}; AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器 builder.setTitle("性别"); //设置标题 builder.setSingleChoiceItems(items,sexFlag,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {//第二个参数是默认选中的哪个项 dialog.dismiss(); Toast.makeText(UserInfoActivity.this,items[which],Toast.LENGTH_SHORT).show(); setSex(items[which]); } }); builder.create().show(); } /** * 更新界面上的性别数据 */ private void setSex(String sex){ tv_sex.setText(sex); // 更新数据库中的性别字段 DBUtils.getInstance(UserInfoActivity.this).updateUserInfo("sex", sex, spUserName); } /** * 获取回传数据时需使用的跳转方法, * 第一个参数to表示需要跳转到的界面,第二个参数requestCode表示一个请求码,第三个参数b表示跳转时传递的数据 */ public void enterActivityForResult(Class<?> to, int requestCode, Bundle b) { Intent i = new Intent(this, to); i.putExtras(b); startActivityForResult(i, requestCode); } /** * 回传数据 */ private String new_info;//最新数据 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case CHANGE_NICKNAME://个人资料修改界面回传过来的昵称数据 if (data != null) { new_info = data.getStringExtra("nickName"); if (TextUtils.isEmpty(new_info) || new_info == null) { return; } tv_nickName.setText(new_info); // 更新数据库中的昵称字段 DBUtils.getInstance(UserInfoActivity.this).updateUserInfo( "nickName", new_info, spUserName); } break; case CHANGE_SIGNATURE://个人资料修改界面回传过来的签名数据 if (data != null) { new_info = data.getStringExtra("signature"); if (TextUtils.isEmpty(new_info) || new_info == null) { return; } tv_signature.setText(new_info); // 更新数据库中的签名字段 DBUtils.getInstance(UserInfoActivity.this).updateUserInfo( "signature", new_info, spUserName); } break; /*完成头像修改功能的代码---创新功能一*/ //相机拍照后的返回结果 case 3: if (resultCode == RESULT_OK) { File temp = new File(Environment.getExternalStorageDirectory() + "/head.jpg"); cropPhoto(Uri.fromFile(temp));//裁剪图片 } break; //从相册里面取相片的返回结果 case 4: if (resultCode == RESULT_OK) { cropPhoto(data.getData());//裁剪图片 } break; //调用系统裁剪图片后 case 5: if (data != null) { Bundle extras = data.getExtras(); head = extras.getParcelable("data"); if (head != null) { /** * 上传服务器代码 */ setPicToView(head);//保存在SD卡中 iv_head_icon.setImageBitmap(head);//用ImageView显示出来 } } break; /*完成头像修改功能的代码---创新功能一*/ default: break; } /*完成头像修改功能的代码---创新功能一*/ super.onActivityResult(requestCode, resultCode, data); /*完成头像修改功能的代码---创新功能一*/ }; /*完成头像修改功能的代码---创新功能一*/ private void ActionSheetDialog() { final String[] stringItems = {"拍照", "从相册中选择", "图片商城"}; final ActionSheetDialog dialog = new ActionSheetDialog(context, stringItems, null); dialog.title("请选择头像更换方式")// .titleTextSize_SP(14.5f)// .show(); dialog.setOnOperItemClickL(new OnOperItemClickL() { @Override public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == 0) {//调用相机拍照 T.showShort(context, stringItems[position]); //最好用try/catch包裹一下,防止因为用户未给应用程序开启相机权限,而使程序崩溃 try { Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//开启相机应用程序获取并返回图片(capture:俘获) intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "head.jpg")));//指明存储图片或视频的地址URI startActivityForResult(intent1, 3);//采用ForResult打开 } catch (Exception e) { Toast.makeText(UserInfoActivity.this, "相机无法启动,请先开启相机权限", Toast.LENGTH_LONG).show(); } dialog.dismiss(); }else if (position == 1) {//从相册里面取照片 T.showShort(context, stringItems[position]); Intent intent2 = new Intent(Intent.ACTION_PICK, null);//返回被选中项的URI intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");//得到所有图片的URI startActivityForResult(intent2, 4); dialog.dismiss(); }else if (position == 2) { T.showShort(context, stringItems[position]); Intent intent2 = new Intent(UserInfoActivity.this,PhotoWall.class); startActivityForResult(intent2, 0); dialog.dismiss(); } } }); } /** * 调用系统的裁剪 * * @param uri */ public void cropPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); //找到指定URI对应的资源图片 intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // aspectX aspectY 是裁剪框宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 150);// 输出图片大小 intent.putExtra("outputY", 150); intent.putExtra("return-data", true); //进入系统裁剪图片的界面 startActivityForResult(intent, 5); } private void setPicToView(Bitmap mBitmap) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd卡是否可用 return; } FileOutputStream b = null; File file = new File(path); file.mkdirs();// 创建以此File对象为名(path)的文件夹 String fileName = path + "head.jpg";//图片名字 try { b = new FileOutputStream(fileName); mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件(compress:压缩) } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { //关闭流 b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } } /*完成头像修改功能的代码---创新功能一*/ }

MyInfoView.java完整代码:

复制代码
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
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
package china.ynyx.heyunhui.view; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import china.ynyx.heyunhui.R; import china.ynyx.heyunhui.activity.CheckActivity; import china.ynyx.heyunhui.activity.LoginActivity; import china.ynyx.heyunhui.activity.PlayHistoryActivity; import china.ynyx.heyunhui.activity.SettingActivity; import china.ynyx.heyunhui.activity.UserInfoActivity; import china.ynyx.heyunhui.adapter.PlayHistoryAdapter; import china.ynyx.heyunhui.utils.AnalysisUtils; public class MyInfoView{ public ImageView iv_head_icon = null; private LinearLayout ll_head; private RelativeLayout rl_course_history,rl_setting; private TextView tv_user_name,tv_sign_in; private Activity mContext; private LayoutInflater mInflater; private View mCurrentView; /*完成头像修改功能的代码---创新功能一*/ private static String path = "/sdcard/DemoHead/";//sd路径 /*完成头像修改功能的代码---创新功能一*/ public MyInfoView(Activity context){ mContext = context; //为以后将Layout转换为view时用 mInflater = LayoutInflater.from(mContext); } private void createView(){ initView(); } //获取界面控件 private void initView() { // TODO Auto-generated method stub //设置布局文件 mCurrentView = mInflater.inflate(R.layout.main_view_myinfo,null); ll_head = (LinearLayout) mCurrentView.findViewById(R.id.ll_head); iv_head_icon = (ImageView)mCurrentView.findViewById(R.id.iv_head_icon); rl_course_history = (RelativeLayout)mCurrentView.findViewById(R.id.rl_course_history); rl_setting = (RelativeLayout)mCurrentView.findViewById(R.id.rl_setting); tv_user_name = (TextView) mCurrentView.findViewById(R.id.tv_user_name); tv_sign_in = (TextView) mCurrentView.findViewById(R.id.tv_sign_in); mCurrentView.setVisibility(View.VISIBLE); setLoginParams(readLoginStatus());//设置登录时界面控件的状态 //签到的点击事件 tv_sign_in.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //判断是否已经登录 if(readLoginStatus()){ //已登录跳转到签到界面 Intent intent = new Intent(mContext,CheckActivity.class); mContext.startActivity(intent); }else{ //未登录跳转到登录界面 Toast.makeText(mContext,"您还未登录,请先登录",Toast.LENGTH_SHORT).show(); } } }); //设置头像和用户名的点击事件 ll_head.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //判断是否已经登录 if(readLoginStatus()){ //已登录跳转到个人资料界面 Intent intent = new Intent(mContext,UserInfoActivity.class); mContext.startActivity(intent); }else{ //未登录跳转到登录界面 Intent intent = new Intent(mContext,LoginActivity.class); mContext.startActivityForResult(intent,1); } } }); //设置播放条目的点击事件 rl_course_history.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(readLoginStatus()){ //跳转到用户播放界面 Intent intent = new Intent(mContext,PlayHistoryActivity.class); mContext.startActivityForResult(intent,1); }else{ Toast.makeText(mContext,"您还未登录,请先登录",Toast.LENGTH_SHORT).show(); } } }); //设置的点击事件 rl_setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(readLoginStatus()){ //跳转到设置界面 Intent intent = new Intent(mContext,SettingActivity.class); mContext.startActivityForResult(intent,1); }else{ Toast.makeText(mContext,"您还未登录,请先登录",Toast.LENGTH_SHORT).show(); } } }); } //登录成功后设置我的界面 public void setLoginParams(boolean isLogin) { if (isLogin) { tv_user_name.setText(AnalysisUtils.readLoginUserName(mContext)); /*完成头像修改功能的代码---创新功能一*/ Bitmap bt = BitmapFactory.decodeFile(path + "head.jpg");//从Sd中找头像,转换成Bitmap if(bt!=null){ iv_head_icon.setImageBitmap(bt); }else{ /** * 如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中 */ iv_head_icon.setImageResource(R.drawable.default_icon); } /*完成头像修改功能的代码---创新功能一*/ } else { tv_user_name.setText("点击登录"); /*完成头像修改功能的代码---创新功能一*/ iv_head_icon.setImageResource(R.drawable.default_icon); /*完成头像修改功能的代码---创新功能一*/ } } //获取当前导航栏上方显示对应的View public View getView(){ if (mCurrentView == null){ createView(); } return mCurrentView; } //显示当前导航栏上方显示对应的View界面 public void showView() { if(mCurrentView == null){ createView(); } mCurrentView.setVisibility(View.VISIBLE); } //从SharedPreferences中读取登录状态 private boolean readLoginStatus(){ SharedPreferences sp=mContext.getSharedPreferences("loginInfo", Context.MODE_PRIVATE); boolean isLogin=sp.getBoolean("isLogin",false); return isLogin; } }

最后

以上就是重要火龙果最近收集整理的关于基于eclipse的android项目实战—博学谷(新功能五)更换头像的全部内容,更多相关基于eclipse内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部