来说一下我们的IM发送文件的实现方法吧:
先来看一下代码:
File file = new File("/sdcard/");
if (null == file || !file.exists()) {
return;
}
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(file), "file/*");
startActivity(intent);
EMMessage message = EMMessage.createFileSendMessage(Environment.getExternalStorageDirectory().getAbsolutePath() + "/laoduan.jpg", toChatUsername);
sendMessage(message);
看着代码其实很简单 我们只需要去实现在聊天界面中功能栏中的一个点击事件就可以去成功实现一个发送文件的方法;
撤回消息 说起撤回消息 我们在玩通讯软件中几乎都会有着一个功能,而我们做的IM也是可以实现这功能的 具体实现如下:
首先,我们先设置聊天气泡的点击事件
messageList = (EaseChatMessageList) getView().findViewById(R.id.message_list);
//初始化messagelist
messageList.init(toChatUsername, chatType, null);
//设置item里的控件的点击事件
messageList.setItemClickListener(new EaseChatMessageList.MessageListItemClickListener() {
@Override
public void onUserAvatarClick(String username) {
//头像点击事件
}
@Override
public void onResendClick(final EMMessage message) {
//重发消息按钮点击事件
}
@Override
public void onBubbleLongClick(EMMessage message) {
//气泡框长按事件
}
@Override
public boolean onBubbleClick(EMMessage message) {
//气泡框点击事件,EaseUI有默认实现这个事件,如果需要覆盖,return值要返回true
return false;
}
});
//获取下拉刷新控件
swipeRefreshLayout = messageList.getSwipeRefreshLayout();
//刷新消息列表
messageList.refresh();
messageList.refreshSeekTo(position);
messageList.refreshSelectLast();
再在点击事件里面添加:
来进行撤回消息 但是我们必须在 EaseChatFragment 里面 把下面两个方法改成公共的方法:
完成消息撤回。
今天实现了一个刻度尺的自定义VIew
可进行左右的滑动
例:
public class MyviiewKe extends View {
private static final String TAG = "RulerView";
/**
* 2个大刻度之间间距,默认为1
*/
private int scaleLimit = 1;
/**
* 尺子高度
*/
private int rulerHeight = 50;
/**
* 尺子和屏幕顶部以及结果之间的高度
*/
private int rulerToResultgap = rulerHeight / 4;
/**
* 刻度平分多少份
*/
private int scaleCount = 10; //刻度评分多少份
/**
* 刻度间距
*/
private int scaleGap = 20;
/**
* 刻度最小值
*/
private int minScale = 0;
/**
* 第一次显示的刻度
*/
private float firstScale = 50f;
/**
* 刻度最大值
*/
private int maxScale = 100;
/**
* 背景颜色
*/
private int bgColor = 0xfffcfffc;
/**
* 小刻度的颜色
*/
private int smallScaleColor = 0xff999999;
/**
* 中刻度的颜色
*/
private int midScaleColor = 0xff666666;
/**
* 大刻度的颜色
*/
private int largeScaleColor = 0xff50b586;
/**
* 刻度颜色
*/
private int scaleNumColor = 0xff333333;
/**
* 结果值颜色
*/
private int resultNumColor = 0xff50b586;
/**
* kg颜色
*/
private String unit = "kg";
/**
* kg颜色
*/
private int unitColor = 0xff50b586;
/**
* 小刻度粗细大小
*/
private int smallScaleStroke = 1;
/**
* 中刻度粗细大小
*/
private int midScaleStroke = 2;
/**
* 大刻度粗细大小
*/
private int largeScaleStroke = 3;
/**
* 结果字体大小
*/
private int resultNumTextSize = 20;
/**
* 刻度字体大小
*/
private int scaleNumTextSize = 16;
/**
* 单位字体大小
*/
private int unitTextSize = 13;
/**
* 是否显示刻度结果
*/
private boolean showScaleResult = true;
/**
* 是否背景显示圆角
*/
private boolean isBgRoundRect = true;
/**
* 结果回调
*/
private OnChooseResulterListener onChooseResulterListener;
/**
* 滑动选择刻度
*/
private float computeScale = -1;
/**
* 当前刻度
*/
public float currentScale = firstScale;
private ValueAnimator valueAnimator;
private VelocityTracker velocityTracker = VelocityTracker.obtain();
private String resultText = String.valueOf(firstScale);
private Paint bgPaint;
private Paint smallScalePaint;
private Paint midScalePaint;
private Paint lagScalePaint;
private Paint scaleNumPaint;
private Paint resultNumPaint;
private Paint kgPaint;
private Rect scaleNumRect;
private Rect resultNumRect;
private Rect kgRect;
private RectF bgRect;
private int height, width;
private int smallScaleHeight;
private int midScaleHeight;
private int lagScaleHeight;
private int rulerRight = 0;
private int resultNumRight;
private float downX;
private float moveX = 0;
private float currentX;
private float lastMoveX = 0;
private boolean isUp = false;
private int leftScroll;
private int rightScroll;
private int xVelocity;
public MyviiewKe(Context context) {
this(context, null);
}
public MyviiewKe(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public MyviiewKe(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setAttr(attrs, defStyleAttr);
init();
}
public void setOnChooseResu