# weixin **Repository Path**: wxy11223344/weixin ## Basic Information - **Project Name**: weixin - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-10 - **Last Updated**: 2021-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android仿微信朋友圈功能的实现 #### 介绍 Android仿微信朋友圈功能的实现 #### 软件架构 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0310/205329_d61ba107_2045177.png "q.png")项目的主要目录结构.其中Java里面放的是所以的Java文件,这里主要是实现功能的重要文件。 Res目录下一般放着一些项目需要的资源文件还有布局文件以及一些图片等。其中主要的布局文件是在layout下的。 AndroidManifest又叫功能清单文件,这里面主要是一些用于运行项目的控制文件,像Activity这种都要在这里面声明.如图4-1项目结构图所示 用户可以用手滑动屏幕,进行操作,也可以点击下面的四个按钮进行切换页面以下是实现此功能的核心代码.并且通过点击朋友圈可以进入朋友圈界面.UI模仿微信设计。 private void initView() { /** * RadioGroup */ radioGroup= (RadioGroup) findViewById(R.id.radioGroup); rbChat= (RadioButton) findViewById(R.id.rb_weixin); rbContact= (RadioButton) findViewById(R.id.rb_contact); rbFind= (RadioButton) findViewById(R.id.rb_find); rbMine= (RadioButton) findViewById(R.id.rb_mine); //RadioGroup选中状态改变监听 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.rb_weixin: /** * setCurrentItem第二个参数控制页面切换动画 * true:打开/false:关闭 */ viewPager.setCurrentItem(0, true); break; case R.id.rb_contact: viewPager.setCurrentItem(1, true); break; case R.id.rb_find: viewPager.setCurrentItem(2, true); break; case R.id.rb_mine: viewPager.setCurrentItem(3, true); break; } } }); 定义了四个Fragment weChatFragment, contactsFragment, findFragment, meFragment分别是并且设置适配器显示fragment。 /** * ViewPager部分 */ viewPager = (ViewPager) findViewById(R.id.viewPager); ChatFragment weChatFragment = new ChatFragment(); ContactsFragment contactsFragment = new ContactsFragment(); FindFragment findFragment = new FindFragment(); MineFragment meFragment = new MineFragment(); List allFragment = new ArrayList(); allFragment.add(weChatFragment); allFragment.add(contactsFragment); allFragment.add(findFragment); allFragment.add(meFragment); //ViewPager设置适配器 viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), allFragment)); //ViewPager显示第一个Fragment viewPager.setCurrentItem(0); //ViewPager页面切换监听 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } 当手指点击底面四个button,会 @Override public void onPageSelected(int position) { switch (position) { case 0: radioGroup.check(R.id.rb_weixin); break; case 1: radioGroup.check(R.id.rb_contact); break; case 2: radioGroup.check(R.id.rb_find); break; case 3: radioGroup.check(R.id.rb_mine); break; } } @Override public void onPageScrollStateChanged(int state) { } }); } 我们通过利用view paper与Fragment和RadioGroup实现了仿微信的主界面, ,以上就是主界面的功能和实现。 4.2发布动态 图4-2发布动态图 以下是发布动态以及获取图片发布的人的核心代码。通过SharedPreferences来读取用户名,然后okhttp传入后台。 private void okHttp() { SharedPreferences s = getSharedPreferences("data",MODE_PRIVATE); String username = s.getString("name","username"); final String value = username; new Thread(new Runnable() { @Override public void run() { try { UtilsOkHttp.sendsetCircleOkHttpRequest(value,message.getText().toString(),imgpath,getNowDate( ), Constants.URLSETCIRCLE, new okhttp3.Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { String responseData = response.body().string(); showResponse(responseData); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } 图片上传,通过获取当前时间加用户名作为图片名,通过okhttp连接后台,getFile获取图片路径,开启一个新的线程,向服务器发出请求 private void ImgUpLoad() { SharedPreferences s = getSharedPreferences("data",MODE_PRIVATE); String username = s.getString("name","username"); final String value = username; Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); String dateString = formatter.format(currentTime); final String imgname = value + dateString; new Thread(new Runnable() { @Override public void run() { try { UtilsOkHttp.sendImageOkHttpRequest(getFile(orc_bitmap), imgname+".jpg", Constants.URLSETFILES, new okhttp3.Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { String responseData = response.body().string(); showImgResponse(responseData); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } 当发布成功,通过吐司发出发布成功, private void showResponse(final String response) { runOnUiThread(new Runnable() { @Override public void run() { try { System.out.print("111111111"+response); if (response!=null){ SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit(); editor.putBoolean("ok",true); editor.apply(); editor.commit(); finish(); Toast.makeText(ShareFriendActivity.this, "发布成功", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); } } }); } 发布动态主要要考虑的有当前用户的id获取,文字的获取,图片路径的获取,图片上传到服务器本地时图片路径,并且我们这里用的是先上传图片后发布. 4.3点赞的实现 同样的获取用户名并通过okhttp 与后台交互,后台更新circle表并返回点赞成功 holder.dianzan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("position==========="+position); // removeList(position); if (!circle.getId().equals("")){ id = circle.getId(); } // SharedPreferences s= activity.getSharedPreferences("data",MODE_PRIVATE); SharedPreferences s = con.getSharedPreferences("data",MODE_PRIVATE); username = s.getString("name","username"); // final String value = username; // Toast.makeText(con, "点赞", Toast.LENGTH_SHORT).show(); UtilsOkHttp.sendsetCircleDianzanOkHttpRequest( id,username,Constants.URLDIANZAN, new okhttp3.Callback() { @Override public void onResponse(Call call, Response response) throws IOException { String responseData = response.body().string(); showResponsedianzan(responseData); } @Override public void onFailure(Call call, IOException e) { } }); } }); 图4-3点赞