Commit 859d9a34 authored by jianglx's avatar jianglx

Merge branch 'master-video' of http://113.105.137.151:22280/lify/rvapp into dev_im

parents dbde7cd2 8d604e43
......@@ -303,7 +303,9 @@
android:maxAspectRatio="2.4"
android:screenOrientation="portrait"
android:theme="@style/MyFrameTheme"
android:windowSoftInputMode="adjustResize|stateHidden" /> <!-- 查看预览图 -->
android:windowSoftInputMode="adjustResize|stateHidden" />
<!-- 查看预览图 -->
<activity
android:name="com.ruiwenliu.wrapper.browse.ActivityImageBrowseUrl"
android:configChanges="orientation|keyboardHidden"
......@@ -311,7 +313,18 @@
android:maxAspectRatio="2.4"
android:screenOrientation="portrait"
android:theme="@style/MyFrameTheme"
android:windowSoftInputMode="adjustResize|stateHidden" /> <!-- ================================================================= -->
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.ruiwenliu.wrapper.browse.ActivityImageBrowseUrl2"
android:configChanges="orientation|keyboardHidden"
android:launchMode="singleInstance"
android:maxAspectRatio="2.4"
android:screenOrientation="portrait"
android:theme="@style/MyFrameTheme"
android:windowSoftInputMode="adjustResize|stateHidden" />
<!-- ================================================================= -->
<!-- 高德 -->
<meta-data
android:name="com.amap.api.v2.apikey"
......
......@@ -18,6 +18,7 @@ import android.widget.ImageView;
import com.base.utils.base.BaseActivity;
import com.ruiwenliu.wrapper.R;
import com.ruiwenliu.wrapper.util.ImageFileUtil;
import java.util.ArrayList;
import java.util.List;
......@@ -104,6 +105,7 @@ public class ActivityImageBrowseUrl extends BaseActivity {
}
viewPager.setCurrentItem(select);
}
@Override
......
package com.ruiwenliu.wrapper.browse;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.baidu.mapapi.model.LatLng;
import com.base.utils.base.BaseActivity;
import com.ruiwenliu.wrapper.R;
import com.ruiwenliu.wrapper.dialog.BottomPromptTwoDialog;
import com.ruiwenliu.wrapper.util.ImageFileUtil;
import com.ruiwenliu.wrapper.util.MapUtil;
import com.ruiwenliu.wrapper.util.ViewHolder;
import com.rv.component.utils.LocationRecord;
import java.util.ArrayList;
import java.util.List;
/**
* 图片浏览
* 使用方法:
* 1.图片id集合,2.背景
* ArrayList<String> images = new ArrayList<>();
* images.add("url");
* Bundle bundle = new Bundle();
* bundle.putInt(ActivityImageBrowseInt.KEY_BACKGROUND,R.color.colorPrimary);
* bundle.putIntegerArrayList(ActivityImageBrowseUrl.KEY_IMAGE,images);
* IntentUtil.startActivity(baseContext,ActivityImageBrowseUrl.class,bundle);
*/
public class ActivityImageBrowseUrl2 extends BaseActivity {
final public static String KEY_IMAGE = "image";
final public static String KEY_BACKGROUND = "background";
final public static String KEY_SELECTPOSITION = "select";
FrameLayout root;
ViewPager viewPager;
RecyclerView recyclerView;
ArrayList<String> urlList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_browse);
root = findViewById(R.id.activity_image_browse_root);
viewPager = findViewById(R.id.activity_image_browse_view_pager);
recyclerView = findViewById(R.id.activity_image_browse_recycler_view);
onData();
onView();
}
private List<FragmentImageBrowse2> fragmentImageBrowseList;
private AdapterRecyclerViewIndicator adapterRecyclerViewIndicator;
@Override
public void onData() {
fragmentImageBrowseList = new ArrayList<>();
int select = getIntent().getIntExtra(ActivityImageBrowseInt.KEY_SELECTPOSITION, 0);
int background = getIntent().getIntExtra(ActivityImageBrowseInt.KEY_BACKGROUND, 0);
if (background != 0) {
root.setBackgroundColor(ContextCompat.getColor(baseContext, background));
}
urlList = getIntent().getStringArrayListExtra(ActivityImageBrowseUrl2.KEY_IMAGE);
if (urlList != null) {
for (String url : urlList) {
fragmentImageBrowseList.add(FragmentImageBrowse2.getInstance(url));
}
}
viewPager.setAdapter(new AdapterViewPager(getSupportFragmentManager()));
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
index = position;
adapterRecyclerViewIndicator.notifyDataSetChanged();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
if (fragmentImageBrowseList.size() >= 2) {
recyclerView.setVisibility(View.VISIBLE);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(baseContext);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(linearLayoutManager);
adapterRecyclerViewIndicator = new AdapterRecyclerViewIndicator();
recyclerView.setAdapter(adapterRecyclerViewIndicator);
}
viewPager.setCurrentItem(select);
viewPager.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new BottomPromptTwoDialog(ActivityImageBrowseUrl2.this) {
@Override
public void helper(ViewHolder helper) {
super.helper(helper);
}
}.show();
}
});
}
@Override
public void onView() {
}
class AdapterViewPager extends FragmentPagerAdapter {
public AdapterViewPager(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragmentImageBrowseList.get(position);
}
@Override
public int getCount() {
return fragmentImageBrowseList.size();
}
}
private static int index = 0;
class AdapterRecyclerViewIndicator extends RecyclerView.Adapter<AdapterRecyclerViewIndicator.ViewHolderIndicator> {
@Override
public ViewHolderIndicator onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(baseContext).inflate(R.layout.item_image_browse_indicator_point, parent, false);
return new ViewHolderIndicator(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolderIndicator holder, int position) {
if (index == position) {
holder.imageView.setImageResource(R.drawable.ic_indicator_point_select);
} else {
holder.imageView.setImageResource(R.drawable.ic_indicator_point_normal);
}
}
@Override
public int getItemCount() {
return fragmentImageBrowseList.size();
}
class ViewHolderIndicator extends RecyclerView.ViewHolder {
ImageView imageView;
public ViewHolderIndicator(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.item_image_browse_indicator_point_image_view);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
index = 0;
}
}
......@@ -4,14 +4,21 @@ import android.os.Bundle;
import android.support.annotation.IntegerRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.baidu.mapapi.model.LatLng;
import com.base.utils.base.BaseFragment;
import com.base.utils.ui.image.pinch.PinchImageView;
import com.ruiwenliu.wrapper.R;
import com.ruiwenliu.wrapper.dialog.BottomPromptTwoDialog;
import com.ruiwenliu.wrapper.util.ImageFileUtil;
import com.ruiwenliu.wrapper.util.MapUtil;
import com.ruiwenliu.wrapper.util.ViewHolder;
import com.ruiwenliu.wrapper.util.glide.GlideManager;
import com.rv.component.utils.LocationRecord;
import java.util.Objects;
......
package com.ruiwenliu.wrapper.browse;
import android.os.Bundle;
import android.support.annotation.IntegerRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.base.utils.base.BaseFragment;
import com.base.utils.ui.image.pinch.PinchImageView;
import com.ruiwenliu.wrapper.R;
import com.ruiwenliu.wrapper.dialog.BottomPromptTwoDialog;
import com.ruiwenliu.wrapper.util.ImageFileUtil;
import com.ruiwenliu.wrapper.util.ViewHolder;
import com.ruiwenliu.wrapper.util.glide.GlideManager;
import java.util.Objects;
/**
* 浏览图片的碎片
* FragmentImageBrowse
*/
public class FragmentImageBrowse2 extends BaseFragment {
final private static String KEY_IMAGE_INT = "image_int";
final private static String KEY_IMAGE_STRING = "image_string";
private int getImageInt() {
if (getArguments() == null) return 0;
return getArguments().getInt(FragmentImageBrowse2.KEY_IMAGE_INT);
}
private String getImageString() {
if (getArguments() == null) return "";
return getArguments().getString(FragmentImageBrowse2.KEY_IMAGE_STRING);
}
public static FragmentImageBrowse2 getInstance(@IntegerRes int imageRes) {
FragmentImageBrowse2 instance = new FragmentImageBrowse2();
Bundle bundle = new Bundle();
bundle.putInt(FragmentImageBrowse2.KEY_IMAGE_INT, imageRes);
instance.setArguments(bundle);
return instance;
}
public static FragmentImageBrowse2 getInstance(String imageUrl) {
FragmentImageBrowse2 instance = new FragmentImageBrowse2();
Bundle bundle = new Bundle();
bundle.putString(FragmentImageBrowse2.KEY_IMAGE_STRING, imageUrl);
instance.setArguments(bundle);
return instance;
}
PinchImageView pinchImageView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_image_browse, container, false);
pinchImageView = view.findViewById(R.id.image_browse_pinch_image_view);
onData();
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
onView();
}
@Override
public void onData() {
}
@Override
public void onView() {
if (getImageInt() != 0) {
pinchImageView.setImageResource(getImageInt());
} else {
GlideManager.getInstance(baseContext).loadImage(getImageString(), pinchImageView);
}
pinchImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Objects.requireNonNull(getActivity()) != null)
Objects.requireNonNull(getActivity()).finish();
}
});
pinchImageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
new BottomPromptTwoDialog(baseContext) {
@Override
public void helper(ViewHolder helper) {
super.helper(helper);
helper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int i = v.getId();
if (i == R.id.btn1) {
if (TextUtils.isEmpty(getImageString())) {
return;
}
if (getImageString().toLowerCase().endsWith("gif")) {// 保存Gif
ImageFileUtil.downImageToGallery(baseContext, getImageString());
} else {// 保存图片
ImageFileUtil.downImageToGallery(baseContext, getImageString());
}
dismiss();
} else if (i == R.id.btn2) {
dismiss();
}
}
}, R.id.btn1, R.id.btn2);
}
}.show();
return false;
}
});
}
}
package com.ruiwenliu.wrapper.dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.Gravity;
import android.view.ViewGroup;
import com.ruiwenliu.wrapper.R;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
/**
* 提示
*/
public class BottomPromptTwoDialog extends BaseDialog {
public BottomPromptTwoDialog(@NonNull Context context) {
super(context);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM);
}
@Override
public int getViewLayout() {
return R.layout.dialog_prompt_two_bottom;
}
}
package com.ruiwenliu.wrapper.util;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.widget.Toast;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.ruiwenliu.wrapper.util.glide.GlideApp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
public class ImageFileUtil {
/**
* 将图片(本地/网络)保存至相册
*/
public static void downImageToGallery(final Context context, String url) {
if (url.toLowerCase().endsWith("gif")) {
File file = new File(url);
if (file.exists()) {
// 将Gif拷贝到指定路径
String imagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + System.currentTimeMillis() + ".gif";
copyFile(url, imagePath);
Toast.makeText(context, "Gif图保存成功", Toast.LENGTH_SHORT).show();
Intent intentBroadcast = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File mGifFile = new File(imagePath);
intentBroadcast.setData(Uri.fromFile(mGifFile));
context.sendBroadcast(intentBroadcast);
} else {
Toast.makeText(context, "Gif图保存失败", Toast.LENGTH_SHORT).show();
}
} else {
GlideApp.with(context)
.asBitmap()
.load(url)
.dontAnimate()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
saveImageToGallery(context, resource);
Toast.makeText(context, "图片保存成功!", Toast.LENGTH_SHORT).show();
}
});
}
}
/**
* 保存bitmap到本地
*/
public static String saveBitmap(Bitmap bitmap) {
File imageDir = new File(Environment.getExternalStorageDirectory(), "image");
if (!imageDir.exists()) {
imageDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(imageDir, fileName);
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return file.getAbsolutePath();
}
public static File createImageFileForEdit() {
File imageDir = new File(Environment.getExternalStorageDirectory(), "image");
if (!imageDir.exists()) {
imageDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
return new File(imageDir, fileName);
}
public static boolean isExist(String path) {
if (TextUtils.isEmpty(path)) {
return false;
}
File file = new File(path);
return file.exists();
}
private static void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void saveImageToGallery(Context content, Bitmap bitmap) {
File appDir = new File(Environment.getExternalStorageDirectory(), "image");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
// 通知图库更新
content.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file.getAbsolutePath())));
}
}
<?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="wrap_content"
android:gravity="bottom"
android:orientation="vertical"
tools:ignore="MissingDefaultResource">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorWrite"
android:padding="13dp"
android:text="保存图片"
android:textColor="@color/text_Main"
android:textSize="16sp" />
<include layout="@layout/common_line" />
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorWrite"
android:padding="13dp"
android:text="取消"
android:textColor="@color/text_Main"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
......@@ -45,6 +45,8 @@
<color name="gray_47E270">#47E270</color>
<color name="gray_B4B4B4">#B4B4B4</color>
<color name="gray_50171413">#50171413</color>
<color name="gray_ffcc0000">#ffcc0000</color>
<color name="gray_ffff4444">#ffff4444</color>
<!--end-->
</resources>
package com.rv.component.dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.Gravity;
import android.view.ViewGroup;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
/**
* 提示
*/
public class ButtonPromptDialog extends BaseDialog {
public ButtonPromptDialog(@NonNull Context context) {
super(context);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
}
@Override
public int getViewLayout() {
return R.layout.rv_dialog_button_prompt;
}
}
<?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="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_40"
android:layout_marginRight="@dimen/size_40"
android:background="@drawable/shape_rv_bg_while_circle"
android:orientation="vertical">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="@dimen/size_60"
android:layout_marginLeft="@dimen/size_20"
android:gravity="center_vertical"
android:text="拍摄"
android:textColor="@color/colorMain"
android:textSize="16sp" />
<include layout="@layout/common_line" />
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="@dimen/size_60"
android:layout_marginLeft="@dimen/size_20"
android:gravity="center_vertical"
android:text="从相册选择"
android:textColor="@color/colorMain"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
package com.xxfc.discovery.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.ruiwenliu.wrapper.util.glide.GlideManager;
import com.xxfc.discovery.R;
import java.util.List;
/**
* 拍拍
*/
public class DiscoveryPostPatAdapter extends RecyclerView.Adapter<DiscoveryPostPatAdapter.MyViewHolder> {
private List<String> mDatas;
private final LayoutInflater mLayoutInflater;
private final Context mContext;
public DiscoveryPostPatAdapter(Context context, List<String> datas) {
this.mDatas = datas;
this.mContext = context;
this.mLayoutInflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(mLayoutInflater.inflate(R.layout.rv_item_discovery_pat_post_icon, parent, false));
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
if (position >= 9) {//图片已选完时,隐藏添加按钮
holder.imageView.setVisibility(View.GONE);
} else {
holder.imageView.setVisibility(View.VISIBLE);
}
GlideManager.getInstance(mContext).loadImage(mDatas.get(position), holder.imageView);
}
@Override
public int getItemCount() {
return mDatas == null ? 0 : mDatas.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public MyViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.iv_icon);
}
}
}
\ No newline at end of file
......@@ -38,6 +38,7 @@ import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.bean.BeanUserInfo;
import com.ruiwenliu.wrapper.browse.ActivityImageBrowseUrl;
import com.ruiwenliu.wrapper.browse.ActivityImageBrowseUrl2;
import com.ruiwenliu.wrapper.util.um.CustomShareListener;
import com.ruiwenliu.wrapper.util.um.ShareManager;
import com.ruiwenliu.wrapper.weight.TitleView;
......@@ -317,10 +318,10 @@ public class DetailPatActivity extends BaseStatusActivity<DiscoveryPresenter> {
new TypeToken<List<String>>() {
}.getType());
Bundle bundle = new Bundle();
bundle.putInt(ActivityImageBrowseUrl.KEY_BACKGROUND, R.color.colorPrimary);
bundle.putInt(ActivityImageBrowseUrl.KEY_SELECTPOSITION, selectPosition);
bundle.putStringArrayList(ActivityImageBrowseUrl.KEY_IMAGE, (ArrayList<String>) imagesList);
IntentUtil.startActivity(mActivity, ActivityImageBrowseUrl.class, bundle);
bundle.putInt(ActivityImageBrowseUrl2.KEY_BACKGROUND, R.color.colorPrimary);
bundle.putInt(ActivityImageBrowseUrl2.KEY_SELECTPOSITION, selectPosition);
bundle.putStringArrayList(ActivityImageBrowseUrl2.KEY_IMAGE, (ArrayList<String>) imagesList);
IntentUtil.startActivity(mActivity, ActivityImageBrowseUrl2.class, bundle);
}
}
......
package com.xxfc.discovery.widget;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.View;
import com.xxfc.discovery.R;
import com.xxfc.discovery.adapter.DiscoveryPostPatAdapter;
import java.util.Collections;
import java.util.List;
/**
* 自定义拖拽
*/
public class MyCallBack extends ItemTouchHelper.Callback {
private int dragFlags;
private int swipeFlags;
private DiscoveryPostPatAdapter adapter;
private List<String> images;//图片经过压缩处理
// private List<String> originImages;//图片没有经过处理,这里传这个进来是为了使原图片的顺序与拖拽顺序保持一致
private boolean up;//手指抬起标记位
private Activity activity;
public MyCallBack(Activity activity, DiscoveryPostPatAdapter adapter, List<String> images, List<String> originImages) {
this.activity = activity;
this.adapter = adapter;
this.images = images;
// this.originImages = originImages;
}
/**
* 设置item是否处理拖拽事件和滑动事件,以及拖拽和滑动操作的方向
*
* @param recyclerView
* @param viewHolder
* @return
*/
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
//判断 recyclerView的布局管理器数据
if (recyclerView.getLayoutManager() instanceof StaggeredGridLayoutManager) {//设置能拖拽的方向
dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
swipeFlags = 0;//0则不响应事件
}
return makeMovementFlags(dragFlags, swipeFlags);
}
/**
* 当用户从item原来的位置拖动可以拖动的item到新位置的过程中调用
*
* @param recyclerView
* @param viewHolder
* @param target
* @return
*/
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();//得到item原来的position
int toPosition = target.getAdapterPosition();//得到目标position
if (toPosition == images.size() - 1 || images.size() - 1 == fromPosition) {
return true;
}
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(images, i, i + 1);
// Collections.swap(originImages, i, i + 1);
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(images, i, i - 1);
// Collections.swap(originImages, i, i - 1);
}
}
adapter.notifyItemMoved(fromPosition, toPosition);
return true;
}
/**
* 设置是否支持长按拖拽
*
* @return
*/
@Override
public boolean isLongPressDragEnabled() {
return false;
}
/**
* @param viewHolder
* @param direction
*/
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
}
/**
* 当用户与item的交互结束并且item也完成了动画时调用
*
* @param recyclerView
* @param viewHolder
*/
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
adapter.notifyDataSetChanged();
initData();
if (dragListener != null) {
dragListener.clearView();
}
}
/**
* 重置
*/
private void initData() {
if (dragListener != null) {
dragListener.deleteState(false);
dragListener.dragState(false);
}
up = false;
}
/**
* 自定义拖动与滑动交互
*
* @param c
* @param recyclerView
* @param viewHolder
* @param dX
* @param dY
* @param actionState
* @param isCurrentlyActive
*/
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (null == dragListener) {
return;
}
if (dY >= (recyclerView.getHeight()
- viewHolder.itemView.getBottom()//item底部距离recyclerView顶部高度
- activity.getResources().getDimensionPixelSize(R.dimen.size_60))) {//拖到删除处
dragListener.deleteState(true);
if (up) {//在删除处放手,则删除item
viewHolder.itemView.setVisibility(View.INVISIBLE);//先设置不可见,如果不设置的话,会看到viewHolder返回到原位置时才消失,因为remove会在viewHolder动画执行完成后才将viewHolder删除
// originImages.remove(viewHolder.getAdapterPosition());
images.remove(viewHolder.getAdapterPosition());
adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
initData();
return;
}
} else {//没有到删除处
if (View.INVISIBLE == viewHolder.itemView.getVisibility()) {//如果viewHolder不可见,则表示用户放手,重置删除区域状态
dragListener.dragState(false);
}
dragListener.deleteState(false);
}
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
/**
* 当长按选中item的时候(拖拽开始的时候)调用
*
* @param viewHolder
* @param actionState
*/
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
if (ItemTouchHelper.ACTION_STATE_DRAG == actionState && dragListener != null) {
dragListener.dragState(true);
}
super.onSelectedChanged(viewHolder, actionState);
}
/**
* 设置手指离开后ViewHolder的动画时间,在用户手指离开后调用
*
* @param recyclerView
* @param animationType
* @param animateDx
* @param animateDy
* @return
*/
@Override
public long getAnimationDuration(RecyclerView recyclerView, int animationType, float animateDx, float animateDy) {
//手指放开
up = true;
return super.getAnimationDuration(recyclerView, animationType, animateDx, animateDy);
}
public interface DragListener {
/**
* 用户是否将 item拖动到删除处,根据状态改变颜色
*
* @param delete
*/
void deleteState(boolean delete);
/**
* 是否于拖拽状态
*
* @param start
*/
void dragState(boolean start);
/**
* 当用户与item的交互结束并且item也完成了动画时调用
*/
void clearView();
}
private DragListener dragListener;
public void setDragListener(DragListener dragListener) {
this.dragListener = dragListener;
}
}
package com.xxfc.discovery.widget;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
/**
* 手势监听
* Created by kuyue on 2017/6/20 上午10:45.
* 邮箱:595327086@qq.com
*/
public abstract class OnRecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private GestureDetectorCompat mGestureDetector;
private RecyclerView recyclerView;
public OnRecyclerItemClickListener(RecyclerView recyclerView) {
this.recyclerView = recyclerView;
mGestureDetector = new GestureDetectorCompat(recyclerView.getContext(), new ItemTouchHelperGestureListener());
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
mGestureDetector.onTouchEvent(e);
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
mGestureDetector.onTouchEvent(e);
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null) {
RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child);
onItemClick(vh);
}
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null) {
RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child);
onItemLongClick(vh);
}
}
}
public abstract void onItemClick(RecyclerView.ViewHolder vh);
public abstract void onItemLongClick(RecyclerView.ViewHolder vh);
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout 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"
......@@ -7,51 +7,38 @@
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:layout_height="@dimen/size_100"
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.support.v7.widget.RecyclerView
android:id="@+id/rv_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:listSelector="#00000000"
android:numColumns="4" />
android:layout_height="match_parent"
android:layout_marginTop="@dimen/size_100"
android:clipToPadding="false"
android:paddingLeft="@dimen/size_10"
android:paddingRight="@dimen/size_10" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_item_select_address"
android:layout_width="match_parent"
android:layout_width="378dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_15"
android:layout_marginTop="@dimen/size_100"
android:layout_marginRight="@dimen/size_15"
android:gravity="center_vertical"
android:paddingTop="@dimen/size_10"
......@@ -81,8 +68,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/size_8"
android:visibility="gone"
android:src="@drawable/common_icon_circle_delete" />
android:src="@drawable/common_icon_circle_delete"
android:visibility="gone" />
</LinearLayout>
<View
......@@ -91,27 +78,49 @@
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_alignParentBottom="true"
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:layout_marginBottom="@dimen/size_10"
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
android:id="@+id/ll_item_delete"
android:layout_width="match_parent"
android:layout_height="@dimen/size_60"
android:layout_alignParentBottom="true"
android:background="@android:color/holo_red_light"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<ImageView
android:id="@+id/iv_trash_can"
android:layout_width="@dimen/size_20"
android:layout_height="@dimen/size_20"
android:src="@drawable/icon_discover_pat_trash_can" />
<TextView
android:id="@+id/tv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拖动到此处,进行删除"
android:textColor="@color/white"
android:textSize="@dimen/text_14" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
</RelativeLayout>
\ No newline at end of file
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.rv.component.control.SquareCenterImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginRight="4dp"
android:scaleType="centerCrop"
android:src="@drawable/icon_pic_error"/>
</LinearLayout>
......@@ -7,4 +7,5 @@
<string name="discovery_question_and_answer_null">暂无问答数据</string>
<string name="done_with_count">完成(%1$d/%2$d)</string>
<string name="preview">预览</string>
<string name="glide_plus_icon_string">android.resource://</string>
</resources>
......@@ -183,7 +183,7 @@ public class LoginRvActivity extends BaseLoginActivity<CommonPresenter> {
}
umLogin(SHARE_MEDIA.QQ);
} else if (view.getId() == R.id.tv_pwd_login) {
startActivity(PwdLoginActivity.getIntent(mActivity, jumptype));
startActivity(PwdLoginActivity.getIntent(mActivity, jumptype, getPhone()));
} else if (view.getId() == R.id.tv_registered) {
startActivity(RegisteredActivity.getIntent(mActivity, 0, jumptype));
} else if (view.getId() == R.id.iv_clear_phone) {
......
......@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
......@@ -49,16 +50,27 @@ public class PwdLoginActivity extends BaseLoginActivity<CommonPresenter> {
private boolean isShow;
private int jumptype;
public static Intent getIntent(Context context,int jumptype) {
public static Intent getIntent(Context context, int jumptype, String phone) {
return new Intent(context, PwdLoginActivity.class)
.putExtra("jumptype",jumptype);
.putExtra("jumptype", jumptype)
.putExtra("phone", phone);
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
super.initView(savedInstanceState, titleView, intent);
titleView.setTitle(mActivity.getString(R.string.rv_pwd_login));
jumptype = intent.getIntExtra("jumptype",0);
jumptype = intent.getIntExtra("jumptype", 0);
String phone = intent.getStringExtra("phone");
if (!TextUtils.isEmpty(phone)) {
etPhone.setText(phone);
if (phone.length() <= 11) {
etPhone.setSelection(phone.length());
} else {
etPhone.setSelection(11);
}
}
editListener(etPhone);
editListener(etPwd);
}
......@@ -77,37 +89,37 @@ public class PwdLoginActivity extends BaseLoginActivity<CommonPresenter> {
public void onShowResult(int requestType, BaseBean result) {
if (requestType == 0) {
processLoginData((RegisteredBean) result);
}else if (requestType == 10){
setDataUser((BeanUserInfo)result);
} else if (requestType == 10) {
setDataUser((BeanUserInfo) result);
}
}
@OnClick({R2.id.iv_clear_phone, R2.id.iv_clear_pwd, R2.id.tv_login, R2.id.tv_phone_login, R2.id.tv_registered, R2.id.iv_weixin, R2.id.iv_qq, R2.id.tv_forget_pwd})
public void onViewClicked(View view) {
if(view.getId()==R.id.iv_clear_phone){
if (view.getId() == R.id.iv_clear_phone) {
clearEditData(etPhone);
}else if(view.getId()==R.id.iv_clear_pwd){
isShow=!isShow;
} else if (view.getId() == R.id.iv_clear_pwd) {
isShow = !isShow;
ivClearPwd.setSelected(isShow);
etPwd.setTransformationMethod(isShow?HideReturnsTransformationMethod.getInstance(): PasswordTransformationMethod.getInstance());
}else if(view.getId()==R.id.tv_login){
etPwd.setTransformationMethod(isShow ? HideReturnsTransformationMethod.getInstance() : PasswordTransformationMethod.getInstance());
} else if (view.getId() == R.id.tv_login) {
if (getPwd().length() < 8) {
showToast(mActivity.getString(R.string.rv_pwd_length));
return;
}
pwdLogin();
}else if(view.getId()==R.id.tv_phone_login){
} else if (view.getId() == R.id.tv_phone_login) {
finish();
}else if(view.getId()==R.id.tv_registered){
startActivity(RegisteredActivity.getIntent(mActivity, 0,jumptype));
} else if (view.getId() == R.id.tv_registered) {
startActivity(RegisteredActivity.getIntent(mActivity, 0, jumptype));
finish();
}else if(view.getId()==R.id.iv_weixin){
} else if (view.getId() == R.id.iv_weixin) {
umLogin(SHARE_MEDIA.WEIXIN);
}else if(view.getId()==R.id.iv_qq){
} else if (view.getId() == R.id.iv_qq) {
umLogin(SHARE_MEDIA.QQ);
}else if(view.getId()==R.id.tv_forget_pwd){
startActivity(RegisteredActivity.getIntent(mActivity, 1,0));
} else if (view.getId() == R.id.tv_forget_pwd) {
startActivity(RegisteredActivity.getIntent(mActivity, 1, 0));
finish();
}
......@@ -208,9 +220,9 @@ public class PwdLoginActivity extends BaseLoginActivity<CommonPresenter> {
@Override
public void afterTextChanged(Editable s) {
super.afterTextChanged(s);
if(editText.getId()==R.id.et_phone){
if (editText.getId() == R.id.et_phone) {
ivClearPhone.setVisibility(getPhone().length() > 0 ? View.VISIBLE : View.GONE);
}else if(editText.getId()==R.id.et_phone_code){
} else if (editText.getId() == R.id.et_phone_code) {
}
// switch (editText.getId()) {
......
......@@ -268,7 +268,7 @@ public class XmppConnectionManager {
}
public synchronized void login(final String userId, final String password) {
if (mConnection.isAuthenticated()) {
if (mConnection != null && mConnection.isAuthenticated()) {
/*// 如果已经登陆
if (StringUtils.parseName(mConnection.getUser()).equals(userId)) {
// 如果登陆的用户和需要在登陆的是同一个用户,赋予可能改变的用户名和密码,返回
......
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