Commit ac00b86a authored by linfeng's avatar linfeng

发现和优惠券

parent 9dbc3c87
......@@ -3,6 +3,7 @@ package com.frame.base;
import android.app.Application;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Environment;
import android.os.Looper;
import android.util.Log;
......@@ -25,6 +26,8 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.io.File;
/**
* 入口
*/
......@@ -32,6 +35,13 @@ import org.greenrobot.eventbus.ThreadMode;
public abstract class FrameApp extends BaseApp {
protected static FrameApp appInstance;
/* 文件缓存的目录 */
public String mAppDir;
public String mPicturesDir;
public String mVoicesDir;
public String mVideosDir;
public String mFilesDir;
public static FrameApp getInstance() {
return appInstance;
}
......@@ -82,6 +92,8 @@ public abstract class FrameApp extends BaseApp {
LanguageUtil.setAppLanguage(appInstance); //语言
ActivityUtil.registerActivityListener(appInstance); //Activity管理
FileUtil.setAppFileDir(); //设置App存储主目录
// 初始化App目录
initAppDir();
if (Config.isOpenTryCatchException) {
openTryException(); //异常捕获,务必在开启Bugly之前调用
}
......@@ -89,6 +101,49 @@ public abstract class FrameApp extends BaseApp {
}
private void initAppDir() {
File file = getExternalFilesDir(null);
if (file != null && !file.exists()) {
file.mkdirs();
}
if (file != null) {
mAppDir = file.getAbsolutePath();
}
file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
if (file != null && !file.exists()) {
file.mkdirs();
}
if (file != null) {
mPicturesDir = file.getAbsolutePath();
}
file = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
if (file != null && !file.exists()) {
file.mkdirs();
}
if (file != null) {
mVoicesDir = file.getAbsolutePath();
}
file = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
if (file != null && !file.exists()) {
file.mkdirs();
}
if (file != null) {
mVideosDir = file.getAbsolutePath();
}
file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
if (file != null && !file.exists()) {
file.mkdirs();
}
if (file != null) {
mFilesDir = file.getAbsolutePath();
}
}
@Override
public void onTrimMemory(int level) {
......
......@@ -29,4 +29,20 @@ public final class Constance {
public static final String ACTIVITY_URL_CALENDAR ="/plugin/calendar/CalendarActivity";
public static final String ACTIVITY_URL_SHAREIMAGE="/main/home/ShareImageActivity";
public static final String ACTIVITY_URL_PUBLISHINGPROBLEM="/discovery/other/PublishingProblemActivity";
public static final String ACTIVITY_URL_DETAILQUESTIONANDANSWER="/discovery/other/DetailQuestionAndAnswerActivity";
public static final String ACTIVITY_URL_POSTPAT="/discovery/other/PostPatActivity";
public static final String ACTIVITY_URL_DETAILPAT="/discovery/other/DetailPatActivity";
public static final String ACTIVITY_URL_SENDVIDEO="/discovery/other/SendVideoActivity";
public static final String ACTIVITY_URL_CAMERAVIEW="/discovery/other/CameraViewActivity";
public static final String ACTIVITY_URL_MAPLOCATION="/discovery/other/MapLocationActivity";
public static final String ACTIVITY_URL_COUPONALL="/xxrv/coupon/CouponAllActivity";
}
......@@ -7,8 +7,10 @@ android {
applicationId "com.xxfc.rv"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 113
versionName "1.1.3"
// versionCode 113
versionCode 130
// versionName "1.1.3"
versionName "1.3.0"
multiDexEnabled true
//新版Gradle 是 implementation 为了兼容compile,写上这句话
......@@ -17,6 +19,14 @@ android {
includeCompileClasspath = true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
signingConfigs {
release {
......
......@@ -31,6 +31,14 @@
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 暂时不用 -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH" /> -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> -->
......
......@@ -8,9 +8,10 @@ package com.frame.rv.config;
*/
public interface RvFrameConfig extends RvFrameConstant {
String HOST = "https://xxtest.upyuns.com";
// String HOST = "https://xxtest.upyuns.com";
// String HOST = "http://10.1.37.192:8765";
// String HOST = "http://10.1.37.248:8765";
String HOST = "https://dev.dfangche.com";
// String HOST = "http://10.5.52.4:8765";
// String HOST = "http://10.1.37.244:9527";
String ADMIN_POST =HOST + "/api/admin/";
String AUTH_POST = HOST + "/api/auth/";
......
......@@ -32,6 +32,9 @@ allprojects {
maven {
url "https://jitpack.io"
}
maven {
url 'https://dl.bintray.com/cjt/maven'
}
}
}
......
package com.rv.component.control;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
* 自定义gridview,解决ListView中嵌套gridview显示不正常的问题(1行半)
*
*/
public class MyGridView extends GridView {
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
\ No newline at end of file
package com.rv.component.control;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
* 正方形的ImageView
*
* @author dty
*/
public class SquareCenterImageView extends ImageView {
public SquareCenterImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public SquareCenterImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareCenterImageView(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// For simple implementation, or internal size is always 0.
// We depend on the container to specify the layout size of
// our view. We can't really know what it is since we will be
// adding and removing different arbitrary views and do not
// want the layout to change as this happens.
setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));
// Children are just made to fill our space.
int childWidthSize = getMeasuredWidth();
//高度和宽度一样
heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/common_icon_select" android:state_selected="true"/>
<item android:drawable="@drawable/common_icon_unselect" android:state_selected="false"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="50dp" />
<solid android:color="@color/gray_FFB74B" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!--空心框 圆角 少量红-->
<corners android:radius="6dp" />
<stroke
android:width="1dp"
android:color="@color/colorGray" />
</shape>
\ No newline at end of file
......@@ -36,6 +36,7 @@
<color name="gray_50000000">#50000000</color>
<color name="gray_EEEEEE">#EEEEEE</color>
<color name="gray_ba242525">#ba242525</color>
<color name="gray_F64747">#F64747</color>
<!--end-->
......
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.component_utils" />
package="com.example.component_utils" >
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
package com.rv.component.utils; import android.app.Activity;import android.bluetooth.BluetoothAdapter;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Build;import android.provider.Settings;import android.support.annotation.RequiresApi;import android.telephony.TelephonyManager;import android.text.TextUtils;import android.util.Base64;import android.util.DisplayMetrics; import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.text.DecimalFormat;import java.util.UUID; /** * 工具类 */public class Inc { /** * 线程睡眠 */ public static void sleep(long time) { try { Thread.sleep(time); } catch (Exception e) { } } /** * 对没有冒号分隔符的MAC地址加上: * * @param mac * @return */ public static String macAddFix(String mac) { String newMac = ""; try { for (int i = 0; i < mac.length(); i = i + 2) { newMac = newMac + mac.substring(i, i + 2) + ":"; } if (newMac.length() > 0) { newMac = newMac.substring(0, newMac.length() - 1); } } catch (Exception e) { e.printStackTrace(); } return newMac; } private static long lastClickTime; /** * 防止按钮频繁点击 * * @return true为是。 如果是在500ms内有点击过就返回true */ public synchronized static boolean isFastClick() { long time = System.currentTimeMillis(); if (time - lastClickTime < 500) { return true; } lastClickTime = time; return false; } /** * 将数字转换成两位小数字符串 * * @param price * @return */ public static String covertNumToStr(Number price) { String str = ""; try { DecimalFormat df = new DecimalFormat("0.00");//格式化小数 str = df.format(price);//返回的是String类型 } catch (Exception e) { e.printStackTrace(); } return str; } /** * 获取手机设备名称 * * @return */ public static String getDeviceName() { String deviceName = ""; try { deviceName = android.os.Build.MODEL; } catch (Exception e) { e.printStackTrace(); } return deviceName; } /** * 获取Android版本 6.0 * * @return */ public static String getReleaseVersion() { String releaseVersion = ""; try { releaseVersion = Build.VERSION.RELEASE; } catch (Exception e) { e.printStackTrace(); } return releaseVersion; } /** * 获取版本号 23 * * @return */ public static String getSdkVersion() { String sdkVersion= ""; try { sdkVersion= String.valueOf(Build.VERSION.SDK_INT); } catch (Exception e) { e.printStackTrace(); } return sdkVersion; } /** * 获取显示屏参数 * * @return */ @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) public static String getDeviceDisplay(Activity activity) { String deviceDisplay= ""; try { //deviceDisplay = Build.DISPLAY; DisplayMetrics metrics =new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); deviceDisplay=metrics.widthPixels + "*" +metrics.heightPixels; } catch (Exception e) { e.printStackTrace(); } return deviceDisplay; } /** * 获取手机制造商 * * @return */ public static String getDeviceProduct() { String deviceProduct= ""; try { //deviceProduct= Build.PRODUCT; deviceProduct= Build.MANUFACTURER; } catch (Exception e) { e.printStackTrace(); } return deviceProduct; } /** * 获取手机MAC * * @return */ public static String getMacAddress(Context context) { String macAddress = "" ; WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); String wifiMac = info.getMacAddress(); if (!TextUtils.isEmpty(wifiMac)&&!wifiMac.equals("02:00:00:00:00:00")) { macAddress = wifiMac; } return macAddress; } /** * 判断是否存在SD卡 * * @return */ public static boolean existSDCard() { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { return true; } else return false; } /** * 将yyMMddHHmm两两拆分 * * @param date * @return yy MM dd HH mm */ public static byte[] splitDate(String date) { byte[] time = new byte[5]; try { for (int i = 0; i < time.length; i++) { String temp = date.substring(i * 2, i * 2 + 2); time[i] = (byte) Integer.parseInt(temp); } } catch (Exception e) { e.printStackTrace(); } return time; } /** * 获取程序版本号 * * @return */ public static String getAppVersion(Context context) { String version = ""; PackageManager manager = null; PackageInfo info = null; manager = context.getPackageManager(); try { info = manager.getPackageInfo(context.getPackageName(), 0); version = info.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return version; } /** * 将图片转换成Base64编码的字符串 */ public static String imageToBase64(String path){ if(TextUtils.isEmpty(path)){ return null; } InputStream is = null; byte[] data = null; String result = null; try{ is = new FileInputStream(path); //创建一个字符流大小的数组。 data = new byte[is.available()]; //写入数组 is.read(data); //用默认的编码格式进行编码 result = Base64.encodeToString(data,Base64.DEFAULT); }catch (Exception e){ e.printStackTrace(); }finally { if(null !=is){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } }
\ No newline at end of file
......@@ -21,6 +21,7 @@ android {
}
}
}
buildTypes {
......@@ -29,6 +30,10 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
dependencies {
......@@ -37,10 +42,16 @@ dependencies {
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc1'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
// 图片编辑库,
implementation 'cc.aoeiuv020:imaging:1.0'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
implementation 'cjt.library.wheel:camera:1.1.9'
implementation 'com.alibaba:fastjson:1.2.21'
api project(':RvWrapper')
api project(':component_resource')
api project(':component_dialog')
api project(':component_utils')
api project(':component_control')
api project(':plugin_imcamera')
}
......@@ -2,12 +2,24 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxfc.discovery">
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<application>
<activity android:name=".fragment.QuestionAndAnswerFragment"></activity>
<activity android:name=".fragment.ShortVideoFragment" />
<activity android:name=".fragment.PatFragment" />
<activity android:name=".fragment.RecommendFragment" />
<activity android:name=".DiscoveryFragment" />
<activity android:name=".other.MapLocationActivity"></activity>
<activity android:name=".other.CameraViewActivity" />
<activity android:name=".other.SendVideoActivity" />
<activity android:name=".other.DetailPatActivity" />
<activity android:name=".other.PostPatActivity" />
<activity android:name=".other.DetailQuestionAndAnswerActivity" />
<activity android:name=".other.PublishingProblemActivity" />
</application>
</manifest>
\ No newline at end of file
......@@ -11,13 +11,19 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.PopupWindow;
import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.frame.base.bus.Observer;
import com.frame.base.bus.RxBus;
import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.adapter.TabAdapter;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseFragment;
import com.ruiwenliu.wrapper.util.ViewHolder;
import com.ruiwenliu.wrapper.weight.horizontal.GallerySnapHelper;
import com.ruiwenliu.wrapper.weight.horizontal.SpaceItemDecoration;
import com.xxfc.discovery.adapter.DiscoveryMenuAdapter;
import com.xxfc.discovery.event.DiscoveryAddEvent;
import com.xxfc.discovery.fragment.PatFragment;
import com.xxfc.discovery.fragment.QuestionAndAnswerFragment;
import com.xxfc.discovery.fragment.RecommendFragment;
......@@ -31,6 +37,7 @@ import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
import butterknife.Unbinder;
import io.reactivex.schedulers.Schedulers;
/**
* 发现模块
......@@ -74,6 +81,25 @@ public class DiscoveryFragment extends BaseFragment<DiscoveryPresenter> {
protected void initView(Bundle savedInstanceState) {
initRecyclerView();
initViewpager();
initRxbus();
}
private void initRxbus() {
RxBus.tObservable(DiscoveryAddEvent.class)
.observeOn(Schedulers.newThread())
.subscribe(new Observer<DiscoveryAddEvent>(disposable) {
@Override
public void onNext(DiscoveryAddEvent event) {
if (1 == event.getType()) {
} else if (2 == event.getType()) {
} else if (3 == event.getType()) {
// menuAdapter.setSelectItem(3);
// mViewPager.setCurrentItem(3);
}
}
});
}
@Override
......@@ -187,9 +213,38 @@ public class DiscoveryFragment extends BaseFragment<DiscoveryPresenter> {
* 展示menu属性 窗体
*/
private void showPopupWindow(final View view) {
if (mPop == null) {
mPop = new AddDiscoveryContentPw(_mActivity);
mPop = new AddDiscoveryContentPw(_mActivity) {
@Override
public void helper(ViewHolder helper) {
super.helper(helper);
helper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.tv_pat) {
//拍拍
ARouter.getInstance()
.build(Constance.ACTIVITY_URL_POSTPAT)
.navigation();
dismiss();
} else if (id == R.id.tv_short_video) {
//短视频
ARouter.getInstance()
.build(Constance.ACTIVITY_URL_SENDVIDEO)
.navigation();
dismiss();
} else if (id == R.id.tv_ask_questions) {
//去提问
ARouter.getInstance()
.build(Constance.ACTIVITY_URL_PUBLISHINGPROBLEM)
.navigation();
dismiss();
}
}
}, R.id.tv_pat, R.id.tv_short_video, R.id.tv_ask_questions);
}
};
mPop.setTouchable(true); // 设置popupwindow可点击
mPop.setBackgroundDrawable(new BitmapDrawable());
mPop.setOutsideTouchable(true);
......@@ -197,7 +252,7 @@ public class DiscoveryFragment extends BaseFragment<DiscoveryPresenter> {
if (isShow) {
mPop.showPopupWindow(view);
}else {
} else {
mPop.dismiss();
}
isShow = !isShow;
......
package com.xxfc.discovery.adapter;
import android.widget.ImageView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ruiwenliu.wrapper.util.glide.GlideManager;
import com.xxfc.discovery.R;
import com.xxfc.discovery.bean.DiscoveryAskBean;
/**
* 问答
*/
public class DiscoveryAskAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
public class DiscoveryAskAdapter extends BaseQuickAdapter<DiscoveryAskBean.DataBeanX.DataBean, BaseViewHolder> {
public DiscoveryAskAdapter() {
super(R.layout.rv_item_discovery_ask);
......@@ -17,7 +21,14 @@ public class DiscoveryAskAdapter extends BaseQuickAdapter<String, BaseViewHolder
private int selectPosition;
@Override
protected void convert(BaseViewHolder helper, String item) {
protected void convert(BaseViewHolder helper, DiscoveryAskBean.DataBeanX.DataBean item) {
if (item ==null){
return;
}
GlideManager.getInstance(mContext).loadImage(item.getPicUrl(), (ImageView)helper.getView(R.id.iv_ask_icon));
helper.setText(R.id.tv_ask_content,item.getContent());
helper.setText(R.id.tv_ask_name,item.getNickname());
helper.setText(R.id.tv_like_number,item.getPraiseCount());
helper.setText(R.id.tv_comment_number,item.getCommentCount() );
}
}
package com.xxfc.discovery.adapter;
import android.view.View;
import android.widget.ImageView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ruiwenliu.wrapper.util.glide.GlideManager;
import com.xxfc.discovery.R;
import com.xxfc.discovery.bean.DiscoveryRecommendBean;
/**
* 推荐
*/
public class DiscoveryRecommendAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
public class DiscoveryRecommendAdapter extends BaseQuickAdapter<DiscoveryRecommendBean.DataBeanX.DataBean, BaseViewHolder> {
public DiscoveryRecommendAdapter() {
super(R.layout.rv_item_discovery_recommend);
......@@ -20,8 +22,29 @@ public class DiscoveryRecommendAdapter extends BaseQuickAdapter<String, BaseView
private int selectPosition;
@Override
protected void convert(BaseViewHolder helper, String item) {
GlideManager.getInstance(mContext).loadImage(item, (ImageView)helper.getView(R.id.iv_icon));
protected void convert(BaseViewHolder helper, DiscoveryRecommendBean.DataBeanX.DataBean item) {
if (item == null) {
return;
}
DiscoveryRecommendBean.DataBeanX.DataBean.Body body = item.getBody();
if (body != null) {
if (body.getImages() != null && body.getImages().size() > 0) {
GlideManager.getInstance(mContext).loadImage(body.getImages().get(0).getOurl(), (ImageView) helper.getView(R.id.iv_icon));
}
helper.setText(R.id.tv_title, body.getText());
if ("4".equals(body.getType())) { //消息类型 基础属性 1=文字消息、2=图文消息、3=语音消息、4=视频消息、 5=文件消
helper.setGone(R.id.iv_isvideo, true);
}else {
helper.setGone(R.id.iv_isvideo, false);
}
}
helper.setText(R.id.tv_user_name,item.getNickname());
GlideManager.getInstance(mContext).loadImage(item.getPicUrl(), (ImageView) helper.getView(R.id.iv_user_icon));
if (item.getCount() !=null) {
helper.setText(R.id.iv_like_number, item.getCount().getPraise());
}
helper.addOnClickListener(R.id.ll_item_islike);
}
......
package com.xxfc.discovery.api;
import com.frame.rv.config.RvFrameConfig;
public interface DiscoveryApi extends RvFrameConfig {
String IMA_BASEUSRL = "https://xxfcim.upyuns.com/xxfcim";
//问题列表
String DISCOVERY_IMQUESTION_LIST = HOST + "/api/im/imQuestion/list";
//添加问题
String DISCOVERY_IMQUESTION_ADD = HOST + "/api/im/imQuestion/add";
//获取推荐消息列表
String DISCOVERY_HOTMSG_LIST = HOST + "/api/im/msg/hotMsg/list";
//获取拍拍、短视频请求列表
String DISCOVERY_UNAUTH_LIST = HOST + "/api/im/msg/app/unauth/list";
//问答详情
String DISCOVERY_FQUESTION = HOST + "/h5/appHtml/view/FQuestion.html";
//拍拍详情
String DISCOVERY_FINDDETAILS = HOST + "/h5/appHtml/view/findDetails.html";
// 问答评论
String DISCOVERY_IMCOMMENT_ADD = HOST + "/api/im/imComment/add";
//拍拍添加评论
String DISCOVERY_COMMENT_ADD = HOST + "/b/circle/msg/comment/add";
// 添加消息(拍拍、段视频)
String DISCOVERY_MSG_ADD = "https://xxfcim.upyuns.com/xxfcim/b/circle/msg/add";
public static String HTTP_URL_FILE_UPLOAD = RvFrameConfig.VEHICLE_UPLOAD + "file/app/unauth/upload";//文件上传
// String HTTP_URL_FILE_UPLOADS = RvFrameConfig.VEHICLE_UPLOAD + "file/app/unauth/uploadFiles";//多张图片上传
String HTTP_URL_FILE_UPLOADS = RvFrameConfig.VEHICLE_UPLOAD + "file/app/unauth/uploads";//多张图片上传
}
package com.xxfc.discovery.bean;
public class BodyAddImQuestion {
private String title;// 标题
private double latitude;//纬度
private double longitude;//经度
private String model;//手机型号
private long time;//时间
private String content;//内容
public BodyAddImQuestion(String title, double latitude, double longitude, String model, long time, String content) {
this.title = title;
this.latitude = latitude;
this.longitude = longitude;
this.model = model;
this.time = time;
this.content = content;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
package com.xxfc.discovery.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
import java.io.Serializable;
import java.util.List;
public class DiscoveryUploadImageBean extends BaseBean {
private List<DataBean> data;
private boolean rel;
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public boolean isRel() {
return rel;
}
public void setRel(boolean rel) {
this.rel = rel;
}
public static class DataBean implements Serializable {
private String imgUrl;
private String fileName;
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
}
package com.xxfc.discovery.bean;
public class ImageSources {
private String originalFileName;
private String originalUrl;
private String thumbnailUrl;
private int status;
private long length;// 语音视频文件的时长,返回数据后,自己在添加上去的
private long size; // 语音视频文件的大小,返回数据后,自己在添加上去的
public String getOriginalFileName() {
return originalFileName;
}
public void setOriginalFileName(String originalFileName) {
this.originalFileName = originalFileName;
}
public String getOriginalUrl() {
return originalUrl;
}
public void setOriginalUrl(String originalUrl) {
this.originalUrl = originalUrl;
}
public String getThumbnailUrl() {
return thumbnailUrl;
}
public void setThumbnailUrl(String thumbnailUrl) {
this.thumbnailUrl = thumbnailUrl;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public long getLength() {
return length;
}
public void setLength(long length) {
this.length = length;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
}
package com.xxfc.discovery.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
/**
* Created :Auser
* Date: 2019/5/24.
* Desc:图片上传
*/
public class PostPatImageUploadBean extends BaseBean{
/**
* data : \2019-05-24\5.jpg
*/
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
package com.xxfc.discovery.dialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import com.xxfc.discovery.R;
/**
* 生活圈 | 短视频模块 评论&回复 输入框
*/
public class TrillCommentInputDialog extends Dialog {
private EditText mEditText;
private ImageView mImageView;
private String mReplyStr;
private OnSendCommentListener mOnSendCommentListener;
public TrillCommentInputDialog(Context context, OnSendCommentListener onSendCommentListener) {
super(context, R.style.BottomDialog);;
this.mOnSendCommentListener = onSendCommentListener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_for_trill_comment_input);
setCanceledOnTouchOutside(true);
initView();
}
public void initView() {
mImageView = findViewById(R.id.send_iv);
mEditText = findViewById(R.id.comment_et);
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String mCommentStr = mEditText.getText().toString();
if (TextUtils.isEmpty(mCommentStr)) {
return;
}
if (mOnSendCommentListener != null) {
dismiss();
mOnSendCommentListener.sendComment(mCommentStr);
}
}
});
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!TextUtils.isEmpty(mEditText.getText().toString())) {
mImageView.setImageResource(R.drawable.icon_tiktok_send_nor);
} else {
mImageView.setImageResource(R.drawable.icon_tiktok_send_nor);
}
}
});
Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(params);
window.setGravity(Gravity.BOTTOM);
// window.setWindowAnimations(R.style.BottomDialog_Animation);
}
public interface OnSendCommentListener {
void sendComment(String str);
}
}
package com.xxfc.discovery.event;
import com.frame.base.bus.Event;
public class DiscoveryAddEvent extends Event {
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
package com.xxfc.discovery.fragment;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.frame.base.url.Constance;
import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseFragment;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.adapter.DiscoveryRecommendAdapter;
import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.bean.DiscoveryRecommendBean;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import com.yuyife.okgo.OkGoUtil;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
/**
* 拍拍
*/
public class PatFragment extends BaseFragment<DiscoveryPresenter> {
public class PatFragment extends BaseFragment<DiscoveryPresenter> implements BaseQuickAdapter.RequestLoadMoreListener, SimpleRefreshLayout.OnSimpleRefreshListener {
@BindView(R2.id.rv_content)
RecyclerView rvContent;
@BindView(R2.id.refresh)
SimpleRefreshLayout mSimpleRefreshLayout;
private DiscoveryRecommendAdapter mAdapter;
private int countPage;
private int mPage;
public static PatFragment getInstance(int type) {
Bundle bundl = new Bundle();
......@@ -27,16 +59,103 @@ public class PatFragment extends BaseFragment<DiscoveryPresenter> {
@Override
protected void initView(Bundle savedInstanceState) {
mSimpleRefreshLayout.setHeaderView(new SimpleRefreshView(_mActivity));
mSimpleRefreshLayout.setOnSimpleRefreshListener(this);
mAdapter = new DiscoveryRecommendAdapter();
rvContent.setLayoutManager(new GridLayoutManager(_mActivity, 2));
rvContent.addItemDecoration(new AbSpacesItemDecoration(15));// 分割线。
rvContent.setNestedScrollingEnabled(false);
rvContent.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
DiscoveryRecommendBean.DataBeanX.DataBean item = (DiscoveryRecommendBean.DataBeanX.DataBean) adapter.getItem(position);
if (item !=null) {
ARouter.getInstance()
.build(Constance.ACTIVITY_URL_DETAILPAT)
.withString("id", item.getMsgId())
.navigation();
}
}
});
}
@Override
protected void loadData(Bundle savedInstanceState) {
onFresh();
}
/**
* 刷新
*/
private void onFresh() {
mPage = 1;
geDataList(mPage);
}
/**
* 请求数据
*
* @param page
*/
private void geDataList(int page) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("page", page);
map.put("type",2);
mPresenter.postData( 0, DiscoveryApi.DISCOVERY_UNAUTH_LIST, DiscoveryRecommendBean.class, map, page == 1 ? false : false);
}
@Override
public void onShowResult(int requestType, BaseBean result) {
mSimpleRefreshLayout.onRefreshComplete();
processData((DiscoveryRecommendBean) result);
}
private void processData(DiscoveryRecommendBean bean) {
if (mPage == 1) {
countPage = bean.getData().getTotalPage();
mAdapter.setNewData(bean.getData().getList());
if (bean.getData().getTotalCount() == 0) {
// mAdapter.setEmptyView(getEmptyView(rvContent, -1, "暂无拍拍数据"));
// mAdapter.notifyDataSetChanged();
}
} else {
mAdapter.addData(bean.getData().getList());
mAdapter.loadMoreComplete();
}
}
@Override
public void onLoadMoreRequested() {
if (mPage >= countPage) {
mAdapter.loadMoreEnd();
} else {
mPage++;
geDataList(mPage);
}
}
@Override
public void onRefresh() {
onFresh();
}
public class AbSpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public AbSpacesItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
outRect.top = space;
}
}
}
package com.xxfc.discovery.fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.frame.base.bus.Observer;
import com.frame.base.bus.RxBus;
import com.frame.base.url.Constance;
import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseFragment;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.adapter.DiscoveryAskAdapter;
import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.bean.DiscoveryAskBean;
import com.xxfc.discovery.event.DiscoveryAddEvent;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import com.yuyife.okgo.OkGoUtil;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
import io.reactivex.schedulers.Schedulers;
/**
* 问答
*/
public class QuestionAndAnswerFragment extends BaseFragment<DiscoveryPresenter> {
public class QuestionAndAnswerFragment extends BaseFragment<DiscoveryPresenter> implements BaseQuickAdapter.RequestLoadMoreListener, SimpleRefreshLayout.OnSimpleRefreshListener {
@BindView(R2.id.rv_content)
RecyclerView rvContent;
@BindView(R2.id.refresh)
SimpleRefreshLayout mSimpleRefreshLayout;
private DiscoveryAskAdapter mAdapter;
private int countPage;
private int mPage;
public static QuestionAndAnswerFragment getInstance(int type) {
Bundle bundl = new Bundle();
......@@ -26,16 +61,99 @@ public class QuestionAndAnswerFragment extends BaseFragment<DiscoveryPresenter>
@Override
protected void initView(Bundle savedInstanceState) {
mSimpleRefreshLayout.setHeaderView(new SimpleRefreshView(_mActivity));
mSimpleRefreshLayout.setOnSimpleRefreshListener(this);
initRxbus();
mAdapter = new DiscoveryAskAdapter();
mAdapter.setOnLoadMoreListener(this, rvContent);
rvContent.setLayoutManager(new LinearLayoutManager(_mActivity));
rvContent.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
DiscoveryAskBean.DataBeanX.DataBean item = (DiscoveryAskBean.DataBeanX.DataBean) adapter.getItem(position);
ARouter.getInstance()
.build(Constance.ACTIVITY_URL_DETAILQUESTIONANDANSWER)
.withString("id",item.getId())
.navigation();
}
});
}
private void initRxbus() {
RxBus.tObservable(DiscoveryAddEvent.class)
.observeOn(Schedulers.newThread())
.subscribe(new Observer<DiscoveryAddEvent>(disposable) {
@Override
public void onNext(DiscoveryAddEvent event) {
if (3 == event.getType()) {
onFresh();
}
}
});
}
@Override
protected void loadData(Bundle savedInstanceState) {
onFresh();
}
/**
* 刷新
*/
private void onFresh() {
mPage = 1;
geDataList(mPage);
}
@Override
public void onShowResult(int requestType, BaseBean result) {
mSimpleRefreshLayout.onRefreshComplete();
processData((DiscoveryAskBean) result);
}
@Override
public void onLoadMoreRequested() {
if (mPage >= countPage) {
mAdapter.loadMoreEnd();
} else {
mPage++;
geDataList(mPage);
}
}
/**
* 问答请求
*
* @param page
*/
private void geDataList(int page) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("page", page);
mPresenter.getData( 0, DiscoveryApi.DISCOVERY_IMQUESTION_LIST, DiscoveryAskBean.class, map, page == 1 ? false : false);
}
private void processData(DiscoveryAskBean bean) {
if (mPage == 1) {
countPage = bean.getData().getTotalPage();
mAdapter.setNewData(bean.getData().getData());
if (bean.getData().getTotalCount() == 0) {
mAdapter.setEmptyView(getEmptyView(rvContent, -1, _mActivity.getString(R.string.discovery_question_and_answer_null)));
mAdapter.notifyDataSetChanged();
}
} else {
mAdapter.addData(bean.getData().getData());
mAdapter.loadMoreComplete();
}
}
@Override
public void onRefresh() {
onFresh();
}
}
......@@ -4,31 +4,42 @@ import android.graphics.Rect;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.frame.base.url.Constance;
import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseFragment;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.adapter.DiscoveryRecommendAdapter;
import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.bean.DiscoveryRecommendBean;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import com.yuyife.okgo.OkGoUtil;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
/**
* 推荐
*/
public class RecommendFragment extends BaseFragment<DiscoveryPresenter> {
public class RecommendFragment extends BaseFragment<DiscoveryPresenter> implements BaseQuickAdapter.RequestLoadMoreListener, SimpleRefreshLayout.OnSimpleRefreshListener {
@BindView(R2.id.rv_content)
RecyclerView rvContent;
@BindView(R2.id.refresh)
SimpleRefreshLayout mSimpleRefreshLayout;
private DiscoveryRecommendAdapter mRecommendAdapter;
private int countPage;
private int mPage;
public static RecommendFragment getInstance(int type) {
Bundle bundl = new Bundle();
......@@ -45,32 +56,100 @@ public class RecommendFragment extends BaseFragment<DiscoveryPresenter> {
@Override
protected void initView(Bundle savedInstanceState) {
mSimpleRefreshLayout.setHeaderView(new SimpleRefreshView(_mActivity));
mSimpleRefreshLayout.setOnSimpleRefreshListener(this);
mRecommendAdapter = new DiscoveryRecommendAdapter();
rvContent.setLayoutManager(new GridLayoutManager(_mActivity, 2));
rvContent.addItemDecoration(new AbSpacesItemDecoration(15));// 分割线。
rvContent.setNestedScrollingEnabled(false);
rvContent.setAdapter(mRecommendAdapter);
initData();
mRecommendAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
DiscoveryRecommendBean.DataBeanX.DataBean item = (DiscoveryRecommendBean.DataBeanX.DataBean) adapter.getItem(position);
if (item !=null){
if ("2".equals(item.getBody().getType())){
ARouter.getInstance()
.build(Constance.ACTIVITY_URL_DETAILPAT)
.withString("id", item.getMsgId())
.navigation();
}else if ("4".equals(item.getBody().getType())){
showToast("亲,该功能还在开发中。。。");
}
}
}
});
private void initData() {
ArrayList<String> strings = new ArrayList<>();
for (int i = 0; i < 6; i++) {
strings.add("https://xxmp.upyuns.com/attachment/images/6/2019/05/mZBh1FV7MveKv5EejtbHMKrKrHm2mJ.png");
mRecommendAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
int id = view.getId();
if (id == R.id.ll_item_islike){
showToast("222222");
}
mRecommendAdapter.addData(strings);
}
});
}
@Override
protected void loadData(Bundle savedInstanceState) {
onFresh();
}
/**
* 刷新
*/
private void onFresh() {
mPage = 1;
geDataList(mPage);
}
/**
* 请求数据
*
* @param page
*/
private void geDataList(int page) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("page", page);
mPresenter.postData( 0, DiscoveryApi.DISCOVERY_HOTMSG_LIST, DiscoveryRecommendBean.class, map, page == 1 ? false : false);
}
@Override
public void onShowResult(int requestType, BaseBean result) {
mSimpleRefreshLayout.onRefreshComplete();
processData((DiscoveryRecommendBean) result);
}
private void processData(DiscoveryRecommendBean bean) {
if (mPage == 1) {
countPage = bean.getData().getTotalPage();
mRecommendAdapter.setNewData(bean.getData().getList());
if (bean.getData().getTotalCount() == 0) {
mRecommendAdapter.setEmptyView(getEmptyView(rvContent, -1, "暂无推荐数据"));
mRecommendAdapter.notifyDataSetChanged();
}
} else {
mRecommendAdapter.addData(bean.getData().getList());
mRecommendAdapter.loadMoreComplete();
}
}
@Override
public void onLoadMoreRequested() {
if (mPage >= countPage) {
mRecommendAdapter.loadMoreEnd();
} else {
mPage++;
geDataList(mPage);
}
}
@Override
public void onRefresh() {
onFresh();
}
......@@ -84,6 +163,7 @@ public class RecommendFragment extends BaseFragment<DiscoveryPresenter> {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int childCount = parent.getChildCount();
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
......
package com.xxfc.discovery.fragment;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseFragment;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.adapter.DiscoveryRecommendAdapter;
import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.bean.DiscoveryRecommendBean;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import com.yuyife.okgo.OkGoUtil;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
/**
* 短视频
*/
public class ShortVideoFragment extends BaseFragment<DiscoveryPresenter> {
public class ShortVideoFragment extends BaseFragment<DiscoveryPresenter> implements BaseQuickAdapter.RequestLoadMoreListener, SimpleRefreshLayout.OnSimpleRefreshListener {
@BindView(R2.id.rv_content)
RecyclerView rvContent;
@BindView(R2.id.refresh)
SimpleRefreshLayout mSimpleRefreshLayout;
private DiscoveryRecommendAdapter mAdapter;
private int countPage;
private int mPage;
public static ShortVideoFragment getInstance(int type) {
......@@ -28,16 +56,91 @@ public class ShortVideoFragment extends BaseFragment<DiscoveryPresenter> {
@Override
protected void initView(Bundle savedInstanceState) {
mSimpleRefreshLayout.setHeaderView(new SimpleRefreshView(_mActivity));
mSimpleRefreshLayout.setOnSimpleRefreshListener(this);
mAdapter = new DiscoveryRecommendAdapter();
rvContent.setLayoutManager(new GridLayoutManager(_mActivity, 2));
rvContent.addItemDecoration(new AbSpacesItemDecoration(15));// 分割线。
rvContent.setNestedScrollingEnabled(false);
rvContent.setAdapter(mAdapter);
}
@Override
protected void loadData(Bundle savedInstanceState) {
onFresh();
}
/**
* 刷新
*/
private void onFresh() {
mPage = 1;
geDataList(mPage);
}
/**
* 请求数据
*
* @param page
*/
private void geDataList(int page) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("page", page);
map.put("type",4);
mPresenter.postData(0, DiscoveryApi.DISCOVERY_UNAUTH_LIST, DiscoveryRecommendBean.class, map, page == 1 ? false : false);
}
@Override
public void onShowResult(int requestType, BaseBean result) {
mSimpleRefreshLayout.onRefreshComplete();
processData((DiscoveryRecommendBean) result);
}
private void processData(DiscoveryRecommendBean bean) {
if (mPage == 1) {
countPage = bean.getData().getTotalPage();
mAdapter.setNewData(bean.getData().getList());
if (bean.getData().getTotalCount() == 0) {
// mAdapter.setEmptyView(getEmptyView(rvContent, -1, "暂无拍拍数据"));
// mAdapter.notifyDataSetChanged();
}
} else {
mAdapter.addData(bean.getData().getList());
mAdapter.loadMoreComplete();
}
}
@Override
public void onLoadMoreRequested() {
if (mPage >= countPage) {
mAdapter.loadMoreEnd();
} else {
mPage++;
geDataList(mPage);
}
}
@Override
public void onRefresh() {
onFresh();
}
public class AbSpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public AbSpacesItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
outRect.top = space;
}
}
}
package com.xxfc.discovery.other;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.cjt2325.cameralibrary.JCameraView;
import com.cjt2325.cameralibrary.listener.ClickListener;
import com.cjt2325.cameralibrary.listener.ErrorListener;
import com.cjt2325.cameralibrary.listener.JCameraListener;
import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.xxfc.discovery.R;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import java.io.File;
/**
* 自定相机
*/
@Route(path = Constance.ACTIVITY_URL_CAMERAVIEW)
public class CameraViewActivity extends BaseStatusActivity<DiscoveryPresenter> {
JCameraView jCameraView;
@Override
protected int setLayout() {
return R.layout.activity_camera_view;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
showTitle(false);
jCameraView = (JCameraView) findViewById(R.id.jcameraview);
//设置视频保存路径
jCameraView.setSaveVideoPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "JCamera");
//设置只能录像或只能拍照或两种都可以(默认两种都可以)
jCameraView.setFeatures(JCameraView.BUTTON_STATE_BOTH);
//设置视频质量
jCameraView.setMediaQuality(JCameraView.MEDIA_QUALITY_MIDDLE);
//JCameraView监听
jCameraView.setErrorLisenter(new ErrorListener() {
@Override
public void onError() {
//打开Camera失败回调
Log.i("CJT", "open camera error");
}
@Override
public void AudioPermissionError() {
//没有录取权限回调
Log.i("CJT", "AudioPermissionError");
}
});
jCameraView.setJCameraLisenter(new JCameraListener() {
@Override
public void captureSuccess(Bitmap bitmap) {
//获取图片bitmap
Log.i("JCameraView", "bitmap = " + bitmap.getWidth());
}
@Override
public void recordSuccess(String url, Bitmap firstFrame) {
//获取视频路径
Log.i("CJT", "url = " + url);
}
//@Override
//public void quit() {
// (1.1.9+后用左边按钮的点击事件替换)
//}
});
//左边按钮点击事件
jCameraView.setLeftClickListener(new ClickListener() {
@Override
public void onClick() {
finish();
}
});
//右边按钮点击事件
jCameraView.setRightClickListener(new ClickListener() {
@Override
public void onClick() {
Toast.makeText(CameraViewActivity.this,"Right",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onShowResult(int requestType, BaseBean result) {
}
@Override
public void onResume() {
super.onResume();
jCameraView.onResume();
}
@Override
protected void onPause() {
super.onPause();
jCameraView.onPause();
}
}
package com.xxfc.discovery.other;
import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.utils.DateUtils;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.dialog.TrillCommentInputDialog;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import com.yuyife.okgo.OkGoUtil;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import static com.ruiwenliu.wrapper.weight.webview.SafeWebView.hasKitkat;
/**
* 拍拍 详情
*/
@Route(path = Constance.ACTIVITY_URL_DETAILPAT)
public class DetailPatActivity extends BaseStatusActivity<DiscoveryPresenter> {
@BindView(R2.id.pb_progress)
ProgressBar pbProgress;
@BindView(R2.id.webView)
WebView mWebView;
@BindView(R2.id.ll_item_comment)
LinearLayout llItemComment;
private String webUrl;
@Autowired()
String id;
@Override
protected int setLayout() {
return R.layout.activity_detail_pat;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("拍拍详情");
webUrl = DiscoveryApi.DISCOVERY_FINDDETAILS + "?id=" + id;
Log.i("CampDetailActivity", "initView: " + webUrl);
initWeb();
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void initWeb() {
WebSettings webSettings = mWebView.getSettings();
if (webSettings == null) return;
// 支持 Js 使用
webSettings.setJavaScriptEnabled(true);
// 开启DOM缓存,默认状态下是不支持LocalStorage的
webSettings.setDomStorageEnabled(true);
// 开启数据库缓存
webSettings.setDatabaseEnabled(true);
// 支持自动加载图片
webSettings.setLoadsImagesAutomatically(hasKitkat());
// 设置 WebView 的缓存模式
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 支持启用缓存模式
webSettings.setAppCacheEnabled(true);
// 设置 AppCache 最大缓存值(现在官方已经不提倡使用,已废弃)
// webSettings.setAppCacheMaxSize(8 * 1024 * 1024);
// Android 私有缓存存储,如果你不调用setAppCachePath方法,WebView将不会产生这个目录
webSettings.setAppCachePath(getCacheDir().getAbsolutePath());
// 数据库路径
// if (!hasKitkat()) {
// webSettings.setDatabasePath(getDatabasePath("html").getPath());
// }
// 关闭密码保存提醒功能
// webSettings.setSavePassword(false);
// 支持缩放
webSettings.setSupportZoom(true);
// 设置 UserAgent 属性
webSettings.setUserAgentString("");
// 允许加载本地 html 文件/false
webSettings.setAllowFileAccess(true);
// 允许通过 file url 加载的 Javascript 读取其他的本地文件,Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
webSettings.setAllowFileAccessFromFileURLs(true);
// 允许通过 file url 加载的 Javascript 可以访问其他的源,包括其他的文件和 http,https 等其他的源,
// Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
// 如果此设置是允许,则 setAllowFileAccessFromFileURLs 不起做用
webSettings.setAllowUniversalAccessFromFileURLs(true);
mWebView.addJavascriptInterface(new AndroidJs(), "AndroidJs");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
});
mWebView.loadUrl(webUrl);
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
pbProgress.setVisibility(View.GONE);//加载完网页进度条消失
} else {
pbProgress.setVisibility(View.VISIBLE);//开始加载网页时显示进度条
pbProgress.setProgress(newProgress);//设置进度值
}
}
});
}
@OnClick({R2.id.ll_item_comment})
public void onViewClicked(View view) {
int id = view.getId();
if (id ==R.id.ll_item_comment){
TrillCommentInputDialog trillCommentInputDialog = new TrillCommentInputDialog(mActivity, new TrillCommentInputDialog.OnSendCommentListener() {
@Override
public void sendComment(String str) {
Map<String, Object> headMap = new LinkedHashMap<>();
if (OkGoUtil.getToken() != null) {
headMap.put("Authorization", OkGoUtil.getToken());
// headMap.put("content-type ","application/json");
Map<String, Object> map = new LinkedHashMap<>();
map.put("messageId",id);
map.put("toUserId","");
map.put("toNickname", "");
map.put("toBody", "");
map.put("body", str);
mPresenter.postData(DiscoveryApi.HOST,1, DiscoveryApi.DISCOVERY_COMMENT_ADD, BaseBean.class, map, headMap,true);
}
}
});
Window window = trillCommentInputDialog.getWindow();
if (window != null) {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);// 软键盘弹起
trillCommentInputDialog.show();
}
}
}
@Override
public void onShowResult(int requestType, BaseBean result) {
mWebView.reload();
}
public class AndroidJs {
@JavascriptInterface
public String getToken() {
return OkGoUtil.getToken();
}
}
@Override
protected void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
mWebView.onResume();// 生命周期onResume
}
@Override
protected void onPause() {
super.onPause();
mWebView.onPause();//生命周期onPause
}
@Override
public void onDestroy() {
super.onDestroy();
mWebView.stopLoading();// 停止当前加载
mWebView.clearMatches();// 清除网页查找的高亮匹配字符。
mWebView.clearHistory();// 清除当前 WebView 访问的历史记录
mWebView.clearSslPreferences();//清除ssl信息
mWebView.clearCache(true);//清空网页访问留下的缓存数据。需要注意的时,由于缓存是全局的,所以只要是WebView用到的缓存都会被清空,即便其他地方也会使用到。该方法接受一个参数,从命名即可看出作用。若设为false,则只清空内存里的资源缓存,而不清空磁盘里的。
mWebView.loadUrl("about:blank");// 清空当前加载
mWebView.removeAllViews();// 清空子 View
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
mWebView.removeJavascriptInterface("AndroidNative");// 向 Web端注入 java 对象
}
// mWebView.addJavascriptInterface(new AndroidJs(),"AndroidJs");
mWebView.destroy();// 生命周期销毁
}
}
package com.xxfc.discovery.other;
import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.utils.DateUtils;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.dialog.TrillCommentInputDialog;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import com.yuyife.okgo.OkGoUtil;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import static com.ruiwenliu.wrapper.weight.webview.SafeWebView.hasKitkat;
/**
* 问答详情
*/
@Route(path = Constance.ACTIVITY_URL_DETAILQUESTIONANDANSWER)
public class DetailQuestionAndAnswerActivity extends BaseStatusActivity<DiscoveryPresenter> {
@BindView(R2.id.pb_progress)
ProgressBar pbProgress;
@BindView(R2.id.webView)
WebView mWebView;
@BindView(R2.id.ll_item_comment)
LinearLayout llItemComment;
private String webUrl;
@Autowired()
String id;
@Override
protected int setLayout() {
return R.layout.activity_detail_question_and_answer;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("问题详情");
webUrl = DiscoveryApi.DISCOVERY_FQUESTION + "?id=" + id;
Log.i("CampDetailActivity", "initView: " + webUrl);
initWeb();
}
@Override
public void onShowResult(int requestType, BaseBean result) {
mWebView.reload();
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void initWeb() {
WebSettings webSettings = mWebView.getSettings();
if (webSettings == null) return;
// 支持 Js 使用
webSettings.setJavaScriptEnabled(true);
// 开启DOM缓存,默认状态下是不支持LocalStorage的
webSettings.setDomStorageEnabled(true);
// 开启数据库缓存
webSettings.setDatabaseEnabled(true);
// 支持自动加载图片
webSettings.setLoadsImagesAutomatically(hasKitkat());
// 设置 WebView 的缓存模式
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 支持启用缓存模式
webSettings.setAppCacheEnabled(true);
// 设置 AppCache 最大缓存值(现在官方已经不提倡使用,已废弃)
// webSettings.setAppCacheMaxSize(8 * 1024 * 1024);
// Android 私有缓存存储,如果你不调用setAppCachePath方法,WebView将不会产生这个目录
webSettings.setAppCachePath(getCacheDir().getAbsolutePath());
// 数据库路径
// if (!hasKitkat()) {
// webSettings.setDatabasePath(getDatabasePath("html").getPath());
// }
// 关闭密码保存提醒功能
// webSettings.setSavePassword(false);
// 支持缩放
webSettings.setSupportZoom(true);
// 设置 UserAgent 属性
webSettings.setUserAgentString("");
// 允许加载本地 html 文件/false
webSettings.setAllowFileAccess(true);
// 允许通过 file url 加载的 Javascript 读取其他的本地文件,Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
webSettings.setAllowFileAccessFromFileURLs(true);
// 允许通过 file url 加载的 Javascript 可以访问其他的源,包括其他的文件和 http,https 等其他的源,
// Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
// 如果此设置是允许,则 setAllowFileAccessFromFileURLs 不起做用
webSettings.setAllowUniversalAccessFromFileURLs(true);
mWebView.addJavascriptInterface(new AndroidJs(), "AndroidJs");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
});
mWebView.loadUrl(webUrl);
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
pbProgress.setVisibility(View.GONE);//加载完网页进度条消失
} else {
pbProgress.setVisibility(View.VISIBLE);//开始加载网页时显示进度条
pbProgress.setProgress(newProgress);//设置进度值
}
}
});
}
@OnClick({R2.id.ll_item_comment})
public void onViewClicked(View view) {
int ids = view.getId();
if (ids == R.id.ll_item_comment) {
TrillCommentInputDialog trillCommentInputDialog = new TrillCommentInputDialog(mActivity, new TrillCommentInputDialog.OnSendCommentListener() {
@Override
public void sendComment(String str) {
Map<String, Object> headMap = new LinkedHashMap<>();
if (OkGoUtil.getToken() != null) {
headMap.put("Authorization", OkGoUtil.getToken());
// headMap.put("content-type ","application/json");
Map<String, Object> map = new LinkedHashMap<>();
map.put("questionId",id);
map.put("content",str);
map.put("time", DateUtils.getCurTimeMillis());
mPresenter.postData(DiscoveryApi.HOST,1, DiscoveryApi.DISCOVERY_IMCOMMENT_ADD, BaseBean.class, map, headMap,true);
}
}
});
Window window = trillCommentInputDialog.getWindow();
if (window != null) {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);// 软键盘弹起
trillCommentInputDialog.show();
}
}
}
public class AndroidJs {
@JavascriptInterface
public String getToken() {
return OkGoUtil.getToken();
}
}
@Override
protected void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
mWebView.onResume();// 生命周期onResume
}
@Override
protected void onPause() {
super.onPause();
mWebView.onPause();//生命周期onPause
}
@Override
public void onDestroy() {
super.onDestroy();
mWebView.stopLoading();// 停止当前加载
mWebView.clearMatches();// 清除网页查找的高亮匹配字符。
mWebView.clearHistory();// 清除当前 WebView 访问的历史记录
mWebView.clearSslPreferences();//清除ssl信息
mWebView.clearCache(true);//清空网页访问留下的缓存数据。需要注意的时,由于缓存是全局的,所以只要是WebView用到的缓存都会被清空,即便其他地方也会使用到。该方法接受一个参数,从命名即可看出作用。若设为false,则只清空内存里的资源缓存,而不清空磁盘里的。
mWebView.loadUrl("about:blank");// 清空当前加载
mWebView.removeAllViews();// 清空子 View
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
mWebView.removeJavascriptInterface("AndroidNative");// 向 Web端注入 java 对象
}
// mWebView.addJavascriptInterface(new AndroidJs(),"AndroidJs");
mWebView.destroy();// 生命周期销毁
}
}
package com.xxfc.discovery.other;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.util.LocationManager;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@Route(path = Constance.ACTIVITY_URL_MAPLOCATION)
public class MapLocationActivity extends BaseStatusActivity<DiscoveryPresenter> {
@BindView(R2.id.bmapView)
MapView mMapView;
@BindView(R2.id.iv_logo)
ImageView ivLogo;
@BindView(R2.id.tv_pat_name)
TextView tvPatName;
@BindView(R2.id.tv_pat_address)
TextView tvPatAddress;
@BindView(R2.id.ll_layout_address)
LinearLayout llLayoutAddress;
BaiduMap mBaiduMap;
private LocationManager locationManager;
boolean isFirstLoc = true; // 是否首次定位
@Autowired()
double latLatitude;
@Autowired()
double lonLongitude;
private String mAddress;
@Override
protected int setLayout() {
return R.layout.activity_map_location;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("所在位置");
initMap();
}
@Override
public void onShowResult(int requestType, BaseBean result) {
}
/**
* 初始化百度
*/
private void initMap() {
mBaiduMap = mMapView.getMap();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
if (latLatitude > 0) {
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(createMapStatusBuilder(new LatLng(latLatitude, lonLongitude)).build()));
} else {
locationManager = new LocationManager(this, new BDAbstractLocationListener() {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
intiMapLocation(bdLocation);
tvPatAddress.setText(bdLocation.getAddrStr());
mAddress = bdLocation.getAddrStr();
locationManager.stopLocation();
// locationManager.onDestroy();
}
});
}
//检索数据
geoCode();
}
private void geoCode() {
final GeoCoder geoCoder = GeoCoder.newInstance();
// 创建地理编码检索实例
OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() {
// 反地理编码查询结果回调函数
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
// 没有检测到结果
}
mAddress = result.getSematicDescription();
tvPatName.setText(result.getBusinessCircle());
tvPatAddress.setText(result.getSematicDescription());//这里的addressText就是我们要的地址
// Log.i("info===",""+result.getAddress()+"=="+result.getBusinessCircle()+"=="+result.getSematicDescription()+"=="+result.toString());
}
// 地理编码查询结果回调函数
@Override
public void onGetGeoCodeResult(GeoCodeResult result) {
if (result == null
|| result.error != SearchResult.ERRORNO.NO_ERROR) {
// 没有检测到结果
}
}
};
// 设置地理编码检索监听者
geoCoder.setOnGetGeoCodeResultListener(listener);
mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {
@Override
public void onMapStatusChangeStart(MapStatus mapStatus) {
tvPatAddress.setVisibility(View.GONE);
Translate();
}
@Override
public void onMapStatusChangeStart(MapStatus mapStatus, int i) {
// LatLng latLng=mapStatus.bound.getCenter();
}
@Override
public void onMapStatusChange(MapStatus mapStatus) {
// LatLng latLng=mapStatus.bound.getCenter();
ivLogo.clearAnimation();
}
@Override
public void onMapStatusChangeFinish(MapStatus mapStatus) {
tvPatAddress.setVisibility(View.VISIBLE);
latLatitude = mapStatus.bound.getCenter().latitude;
lonLongitude = mapStatus.bound.getCenter().longitude;
geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(mapStatus.bound.getCenter()));
}
});
}
/**
* 初始化map
*
* @param location
*/
private void intiMapLocation(BDLocation location) {
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(location.getDirection()).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
// if (!selectCity.equals(nowCity)) {
// setSearchContent(selectCity, selectCity.equals("北京") ? "故宫" : selectCity);
// return;
// }
}
}
@Override
public void onDestroy() {
// 退出时销毁定位
if (locationManager != null) {
locationManager.onDestroy();
}
// MapUtil.getInstance(this).onDestroy();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
/**
* 动画平移
*/
public void Translate() {
/*
* TranslateAnimation translateAni = new TranslateAnimation(fromXType,
* fromXValue, toXType, toXValue, fromYType, fromYValue, toYType,
* toYValue);
*/
//参数1~2:x轴的开始位置
//参数3~4:y轴的开始位置
//参数5~6:x轴的结束位置
//参数7~8:x轴的结束位置
TranslateAnimation translateAni = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
0f, Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, -0.1f);
//设置动画执行的时间,单位是毫秒
translateAni.setDuration(500);
// 设置动画重复次数
// -1或者Animation.INFINITE表示无限重复,正数表示重复次数,0表示不重复只播放一次
translateAni.setRepeatCount(Animation.INFINITE);
// 设置动画模式(Animation.REVERSE设置循环反转播放动画,Animation.RESTART每次都从头开始)
translateAni.setRepeatMode(Animation.REVERSE);
// 启动动画
ivLogo.startAnimation(translateAni);
}
/**
* 通过经纬度获得最新的地址
*
* @param latLng
* @return
*/
private MapStatus.Builder createMapStatusBuilder(LatLng latLng) {
return new MapStatus.Builder().target(latLng).zoom(18.0f);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO: add setContentView(...) invocation
ButterKnife.bind(this);
}
@OnClick({R2.id.tv_pat_ok})
public void onViewClicked(View view) {
int id = view.getId();
if (id == R.id.tv_pat_ok){
if (TextUtils.isEmpty(mAddress) && latLatitude > 0) {
finish();
return;
}
getIntent().putExtra("location", mAddress);
getIntent().putExtra("latitude", latLatitude);
getIntent().putExtra("longitude", lonLongitude);
setResult(RESULT_OK, getIntent());
finish();
}
}
}
package com.xxfc.discovery.other;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.Selection;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.mapapi.model.LatLng;
import com.frame.base.bus.RxBus;
import com.frame.base.url.Constance;
import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.util.LocationManager;
import com.ruiwenliu.wrapper.util.permission.RxPermission;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.utils.DateUtils;
import com.rv.component.utils.Inc;
import com.xxfc.discovery.R;
import com.xxfc.discovery.R2;
import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.bean.BodyAddImQuestion;
import com.xxfc.discovery.event.DiscoveryAddEvent;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
import com.yuyife.okgo.OkGoUtil;
import java.util.LinkedHashMap;
import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
/**
* 问答 发布问题
*/
@Route(path = Constance.ACTIVITY_URL_PUBLISHINGPROBLEM)
public class PublishingProblemActivity extends BaseStatusActivity<DiscoveryPresenter> {
@BindView(R2.id.et_ask_title)
EditText etAskTitle;
@BindView(R2.id.et_ask_content)
EditText etAskContent;
@BindView(R2.id.tv_word_count)
TextView tvWordCount;
@BindView(R2.id.tv_ask_ok)
TextView tvAskOk;
private double latLatitude = 0;
private double lonLongitude;
private LatLng mLatLng;//当前城市经纬度
private LocationManager locationManager;
@Override
protected int setLayout() {
return R.layout.activity_publishing_problem;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("发布问题");
etAskContent.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Editable editable = etAskContent.getText();
int len = editable.toString().length();
tvWordCount.setText(len + "/500");
if (len > 500) {
showToast("超出字数限制");
int selEndIndex = Selection.getSelectionEnd(editable);
String str = editable.toString();
//截取新字符串
String newStr = str.substring(0, 500);
etAskContent.setText(newStr);
editable = etAskContent.getText();
//新字符串的长度
int newLen = editable.length();
//旧光标位置超过字符串长度
if (selEndIndex > newLen) {
selEndIndex = editable.length();
}
//设置新光标所在的位置
Selection.setSelection(editable, selEndIndex);
}
}
});
}
@Override
public void onShowResult(int requestType, BaseBean result) {
DiscoveryAddEvent event = new DiscoveryAddEvent();
event.setType(3);
RxBus.post(event);
finish();
}
@OnClick(R2.id.tv_ask_ok)
public void onViewClicked(View view) {
int id = view.getId();
if (id == R.id.tv_ask_ok) {
String title = etAskTitle.getText().toString().trim();
if (TextUtils.isEmpty(title)) {
showToast("问题标题不能为空!");
return;
}
String content = etAskContent.getText().toString().trim();
if (TextUtils.isEmpty(content)) {
showToast("问题内容不能为空!");
return;
}
upQuestion(title, content);
}
}
private void upQuestion(String title, String content) {
mPresenter.postBodyData(RvFrameConfig.HOST, 0, DiscoveryApi.DISCOVERY_IMQUESTION_ADD, BaseBean.class, new BodyAddImQuestion(title, latLatitude, lonLongitude, Inc.getDeviceName(), DateUtils.getCurTimeMillis(), content), getHeadMap(), true);
}
private Map<String, Object> getHeadMap() {
Map<String, Object> headMap = new LinkedHashMap<>();
if (OkGoUtil.getToken() != null)
headMap.put("Authorization", OkGoUtil.getToken());
return headMap;
}
/**
* 定位权限处理
*/
private void permissionProcess() {
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
new RxPermission(this).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean == true) {
initGps();
} else {
finish();
}
}
});
} else {
initGps();
}
}
/**
* 初始化定位
*/
public void initGps() {
locationManager = new LocationManager(this);
locationManager.getLocationDetail(new BDAbstractLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
//此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
//以下只列举部分获取经纬度相关(常用)的结果信息
//更多结果信息获取说明,请参照类参考中BDLocation类中的说明
//获取定位精度,默认值为0.0f
float radius = location.getRadius();
//获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
String coorType = location.getCoorType();
//获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
int errorCode = location.getLocType();
// setGpsContent("count=:",String.valueOf(count));
// setGpsContent("latitude:",String.valueOf(location.getLatitude()));
// setGpsContent("longitude:",String.valueOf(location.getLongitude()));
// setGpsContent("城市:",location.getCity());
// setGpsContent("街道:",location.getAddrStr());
// setGpsContent("当前位置:",location.getLocationDescribe());
latLatitude = location.getLatitude();
lonLongitude = location.getLongitude();
mLatLng = new LatLng(location.getLatitude(), location.getLongitude());
locationManager.stopLocation();
}
});
}
}
package com.xxfc.discovery.other;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.xxfc.discovery.R;
import com.xxfc.discovery.presenter.DiscoveryPresenter;
/**
* 发短视频
*/
@Route(path = Constance.ACTIVITY_URL_SENDVIDEO)
public class SendVideoActivity extends BaseStatusActivity<DiscoveryPresenter> {
@Override
protected int setLayout() {
return R.layout.activity_send_video;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("发布视频");
}
@Override
public void onShowResult(int requestType, BaseBean result) {
}
}
......@@ -7,6 +7,8 @@ import android.support.annotation.NonNull;
import android.view.View;
import android.view.ViewGroup;
import com.alibaba.android.arouter.launcher.ARouter;
import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.dialog.BasePopupWindow;
import com.ruiwenliu.wrapper.util.ViewHolder;
import com.xxfc.discovery.R;
......@@ -31,33 +33,32 @@ public class AddDiscoveryContentPw extends BasePopupWindow {
@Override
public void helper(ViewHolder helper) {
super.helper(helper);
//拍拍
helper.setOnClickListener(R.id.tv_pat, new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
//短视频
helper.setOnClickListener(R.id.tv_short_video, new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
//去提问
helper.setOnClickListener(R.id.tv_ask_questions, new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
// //拍拍
// helper.setOnClickListener(R.id.tv_pat, new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// dismiss();
// }
// });
//
// //短视频
// helper.setOnClickListener(R.id.tv_short_video, new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// dismiss();
// }
// });
//
// //去提问
// helper.setOnClickListener(R.id.tv_ask_questions, new View.OnClickListener() {
// @Override
// public void onClick(View v) {
//
// }
// });
}
/**
*
* @param anchor v
*/
public void showPopupWindow(final View anchor) {
......@@ -73,7 +74,6 @@ public class AddDiscoveryContentPw extends BasePopupWindow {
}
private void fullScreenImmersive(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN;
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".other.CameraViewActivity">
<com.cjt2325.cameralibrary.JCameraView
android:id="@+id/jcameraview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:duration_max="10000"
app:iconMargin="20dp"
app:iconSize="30dp" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".other.DetailQuestionAndAnswerActivity">
<ProgressBar
android:id="@+id/pb_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/size_3"
android:indeterminateOnly="false"
android:max="100"
android:progressDrawable="@drawable/shape_rv_bg_yellow_progress"
android:visibility="gone">
</ProgressBar>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/ll_item_comment"
android:layout_width="match_parent"
android:layout_height="@dimen/size_60"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="@dimen/size_40"
android:layout_weight="1"
android:text="回复您的答案..."
android:textSize="@dimen/text_14"
android:textColor="@color/colorGray"
android:gravity="center_vertical"
android:paddingLeft="@dimen/size_15"
android:background="@drawable/shape_rv_textview_home_search" />
<TextView
android:layout_width="@dimen/size_60"
android:layout_height="@dimen/size_40"
android:background="@color/gray_FFB74B"
android:layout_marginLeft="@dimen/size_15"
android:gravity="center"
android:text="评论"
android:textColor="@color/colorWrite"
android:textSize="@dimen/text_14" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".other.DetailQuestionAndAnswerActivity">
<ProgressBar
android:id="@+id/pb_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/size_3"
android:indeterminateOnly="false"
android:max="100"
android:progressDrawable="@drawable/shape_rv_bg_yellow_progress"
android:visibility="gone">
</ProgressBar>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/ll_item_comment"
android:layout_width="match_parent"
android:layout_height="@dimen/size_60"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="@dimen/size_40"
android:layout_weight="1"
android:text="回复您的答案..."
android:textSize="@dimen/text_14"
android:textColor="@color/colorGray"
android:gravity="center_vertical"
android:paddingLeft="@dimen/size_15"
android:background="@drawable/shape_rv_textview_home_search" />
<TextView
android:layout_width="@dimen/size_60"
android:layout_height="@dimen/size_40"
android:background="@color/gray_FFB74B"
android:layout_marginLeft="@dimen/size_15"
android:gravity="center"
android:text="评论"
android:textColor="@color/colorWrite"
android:textSize="@dimen/text_14" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".other.MapLocationActivity">
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
<ImageView
android:id="@+id/iv_logo"
android:layout_width="40dp"
android:layout_height="45dp"
android:layout_centerInParent="true"
android:layout_marginBottom="@dimen/size_15"
android:src="@drawable/rv_rentingcar_icon_stop_lever" />
<LinearLayout
android:id="@+id/ll_layout_address"
android:layout_width="match_parent"
android:layout_height="@dimen/size_70"
android:layout_alignParentBottom="true"
android:background="@color/colorWrite"
android:gravity="center_vertical">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/size_15"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/tv_pat_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="集胜五金机电(大塘朗店)"
android:textColor="@color/textGray"
android:textSize="@dimen/text_16" />
<TextView
android:id="@+id/tv_pat_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_8"
android:text="大塘朗路与石大路交叉口北50米"
android:textColor="@color/textGray"
android:textSize="@dimen/text_12" />
</LinearLayout>
<TextView
android:id="@+id/tv_pat_ok"
android:layout_width="@dimen/size_90"
android:layout_height="@dimen/size_40"
android:layout_marginRight="@dimen/size_15"
android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle"
android:gravity="center"
android:text="发送"
android:textColor="@color/colorWrite"
android:textSize="@dimen/text_16" />
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorWrite"
android:orientation="vertical"
tools:context=".other.PostPatActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<EditText
android:id="@+id/et_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:ellipsize="middle"
android:gravity="top"
android:hint="说点什么吧..."
android:inputType="textMultiLine"
android:maxHeight="@dimen/size_200"
android:minHeight="@dimen/size_150"
android:padding="@dimen/size_15"
android:textColor="@color/colorMain"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_14" />
<LinearLayout
android:id="@+id/ll_item_select_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/size_15"
android:paddingRight="@dimen/size_15">
<com.rv.component.control.MyGridView
android:id="@+id/rv_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:listSelector="#00000000"
android:numColumns="4" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_item_select_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:paddingTop="@dimen/size_20"
android:paddingBottom="@dimen/size_20">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/campsite_icon_citylocation_hint" />
<TextView
android:id="@+id/tv_pat_address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_5"
android:layout_weight="1"
android:maxLines="1"
android:singleLine="true"
android:text="您所在的位置"
android:textColor="@color/colorGray"
android:textSize="@dimen/text_12" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/size_1"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:background="@color/colorLine" />
</LinearLayout>
<include layout="@layout/common_line" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_pat_ok"
android:layout_width="match_parent"
android:layout_height="@dimen/size_45"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginTop="@dimen/size_10"
android:layout_marginRight="@dimen/size_15"
android:layout_marginBottom="@dimen/size_15"
android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle"
android:gravity="center"
android:text="立即发布"
android:textColor="@color/colorWrite"
android:textSize="@dimen/text_14" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorWrite"
tools:context=".other.PublishingProblemActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:layout_weight="1"
android:orientation="vertical">
<EditText
android:id="@+id/et_ask_title"
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_marginTop="@dimen/size_20"
android:paddingLeft="@dimen/size_15"
android:paddingRight="@dimen/size_15"
android:gravity="center_vertical"
android:background="@drawable/shape_rv_edittext_line_input"
android:hint="请输入问题"
android:maxLines="1"
android:singleLine="true"
android:textColor="@color/colorMain"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/size_220"
android:layout_marginTop="@dimen/size_20"
android:background="@drawable/shape_rv_edittext_line_input"
android:orientation="vertical">
<EditText
android:id="@+id/et_ask_content"
android:layout_width="match_parent"
android:layout_height="@dimen/size_200"
android:paddingLeft="@dimen/size_15"
android:paddingRight="@dimen/size_15"
android:paddingTop="@dimen/size_15"
android:paddingBottom="@dimen/size_10"
android:gravity="left"
android:background="@null"
android:hint="请输入详细描述"
android:textColor="@color/colorMain"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_16" />
<TextView
android:id="@+id/tv_word_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:textSize="@dimen/text_10"
android:textColor="@color/colorGray"
android:layout_marginRight="@dimen/size_15"
android:text="0/500"/>
</LinearLayout>
</LinearLayout>
<include layout="@layout/common_line"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_ask_ok"
android:layout_width="match_parent"
android:layout_height="@dimen/size_45"
android:textSize="@dimen/text_14"
android:gravity="center"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:layout_marginTop="@dimen/size_10"
android:layout_marginBottom="@dimen/size_15"
android:textColor="@color/colorWrite"
android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle"
android:text="立即发布"/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorWrite"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<EditText
android:id="@+id/et_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:ellipsize="middle"
android:gravity="top"
android:hint="说点什么吧..."
android:inputType="textMultiLine"
android:maxHeight="@dimen/size_200"
android:minHeight="@dimen/size_150"
android:padding="@dimen/size_15"
android:textColor="@color/colorMain"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/text_14" />
<RelativeLayout
android:layout_width="@dimen/size_100"
android:layout_height="@dimen/size_100"
android:layout_marginLeft="@dimen/size_15">
<ImageView
android:layout_width="@dimen/size_100"
android:layout_height="@dimen/size_100"
android:src="@drawable/icon_send_video_button_hint"/>
</RelativeLayout>
<LinearLayout
android:id="@+id/ll_item_select_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:paddingTop="@dimen/size_20"
android:paddingBottom="@dimen/size_20">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/campsite_icon_citylocation_hint" />
<TextView
android:id="@+id/tv_pat_address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_5"
android:layout_weight="1"
android:maxLines="1"
android:singleLine="true"
android:text="您所在的位置"
android:textColor="@color/colorGray"
android:textSize="@dimen/text_12" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/size_1"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginRight="@dimen/size_15"
android:background="@color/colorLine" />
</LinearLayout>
<include layout="@layout/common_line" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_pat_ok"
android:layout_width="match_parent"
android:layout_height="@dimen/size_45"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginTop="@dimen/size_10"
android:layout_marginRight="@dimen/size_15"
android:layout_marginBottom="@dimen/size_15"
android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle"
android:gravity="center"
android:text="立即发布"
android:textColor="@color/colorWrite"
android:textSize="@dimen/text_14" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/comment_et"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="@color/colorWrite"
android:gravity="center_vertical"
android:hint="输入评论内容"
android:paddingLeft="10dp"
android:textColor="@color/black"
android:textSize="@dimen/text_14"/>
<ImageView
android:id="@+id/send_iv"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="@color/colorWrite"
android:paddingBottom="9dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="9dp"
android:src="@drawable/icon_tiktok_send_nor"/>
</LinearLayout>
......@@ -7,6 +7,21 @@
android:orientation="vertical"
tools:context=".fragment.PatFragment">
<com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/size_80"
......@@ -19,4 +34,8 @@
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout>
</LinearLayout>
\ No newline at end of file
......@@ -7,9 +7,17 @@
android:orientation="vertical"
tools:context=".fragment.QuestionAndAnswerFragment">
<com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout>
</LinearLayout>
\ No newline at end of file
......@@ -3,10 +3,25 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/gray_f5f5f5"
android:orientation="vertical"
tools:context=".fragment.RecommendFragment">
<com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/size_80"
......@@ -19,4 +34,7 @@
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout>
</LinearLayout>
\ No newline at end of file
This diff is collapsed.
......@@ -4,4 +4,7 @@
<string name="discovery_pat">拍拍</string>
<string name="discovery_short_video">短视频</string>
<string name="discovery_question_and_answer">问答</string>
<string name="discovery_question_and_answer_null">暂无问答数据</string>
<string name="done_with_count">完成(%1$d/%2$d)</string>
<string name="preview">预览</string>
</resources>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment