Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给大家分享一下Android 仿微信的键盘切换。

效果图如下:

Android 仿微信的键盘切换,实现了录音、表情、其他和软键盘显示之间的切换,其中解决了很多博客介绍的键盘切换时,软键盘显示切换到表情(其他)时,出现屏幕晃动的情况,以及点击和滑动键盘显示区域外时,软键盘隐藏的功能等,废话不多说直接上代码,以供大家参考:

xml:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/linearlayout_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/M323535"

android:fitsSystemWindows="true"

android:orientation="vertical"

tools:context=".ui.activity.ChatActivity">

android:id="@+id/layout_title"

android:layout_width="match_parent"

android:layout_height="@dimen/dp44"

android:background="@color/title_bar"

android:orientation="horizontal">

android:id="@+id/img_finish"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:layout_marginLeft="@dimen/dp3"

android:layout_marginStart="@dimen/dp3"

android:background="@drawable/select_image_finsh"

android:contentDescription="@null" />

android:id="@+id/txt_finish"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_gravity="center"

android:layout_toEndOf="@+id/img_finish"

android:layout_toRightOf="@+id/img_finish"

android:gravity="center"

android:text="@string/img_finish"

android:textColor="@drawable/text_selector"

android:textSize="18sp" />

android:id="@+id/txt_im_object_name"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="center"

android:clickable="false"

android:gravity="center"

android:textColor="@color/MFFCE00"

android:textSize="@dimen/sp20" />

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_above="@+id/keyboardListenRelativeLayout"

android:layout_below="@+id/layout_title">

android:id="@+id/listView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:divider="@null" />

android:id="@+id/layout_voice"

android:layout_width="@dimen/dp200"

android:layout_height="@dimen/dp200"

android:layout_centerInParent="true"

android:visibility="gone">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@drawable/chat_window_backgroud"

android:contentDescription="@null" />

android:id="@+id/img_im_microphone_state"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginTop="@dimen/dp16"

android:background="@mipmap/im_microphone"

android:contentDescription="@null" />

android:id="@+id/img_im_microphone_sound_size"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/img_im_microphone_state"

android:layout_centerHorizontal="true"

android:layout_marginTop="@dimen/dp11"

android:background="@mipmap/chat_volume_06"

android:contentDescription="@null" />

android:id="@+id/txt_im_microphone_show_text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/img_im_microphone_sound_size"

android:layout_centerHorizontal="true"

android:layout_marginTop="@dimen/dp26"

android:contentDescription="@null"

android:text="@string/slide_to_cancel_sending"

android:textColor="@color/M3C3C3C"

android:textSize="@dimen/sp16" />

android:id="@+id/keyboardListenRelativeLayout"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:fillViewport="true">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

android:id="@+id/layout_release"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@color/M575A5B"

android:orientation="horizontal"

tools:ignore="UselessParent">

android:id="@+id/img_voice"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginLeft="@dimen/dp12"

android:layout_marginStart="@dimen/dp12"

android:contentDescription="@null" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1">

android:id="@+id/txt_im_message"

android:layout_width="280dp"

android:layout_height="@dimen/dp30"

android:layout_gravity="center_vertical"

android:layout_marginBottom="@dimen/dp8"

android:layout_marginLeft="@dimen/dp15"

android:layout_marginStart="@dimen/dp15"

android:layout_marginTop="@dimen/dp8"

android:background="@drawable/shape_d8d8d8"

android:gravity="start|top"

android:hint="@string/say_some"

android:imeOptions="actionDone"

android:inputType="textMultiLine"

android:maxLines="6"

android:paddingBottom="@dimen/dp7"

android:paddingLeft="@dimen/dp7"

android:paddingRight="@dimen/dp7"

android:paddingTop="@dimen/dp7"

android:singleLine="false"

android:textColor="@color/M828282"

android:textColorHint="@color/M828282"

android:textCursorDrawable="@drawable/shape_cursor_color"

android:textSize="@dimen/sp12"

/>

android:id="@+id/txt_record"

android:layout_width="match_parent"

android:layout_height="@dimen/dp30"

android:layout_marginBottom="@dimen/dp8"

android:layout_marginLeft="@dimen/dp15"

android:layout_marginStart="@dimen/dp15"

android:layout_marginTop="@dimen/dp8"

android:background="@drawable/shape_im_chat_voice_up"

android:gravity="center"

android:paddingBottom="@dimen/dp7"

android:paddingLeft="@dimen/dp7"

android:paddingRight="@dimen/dp7"

android:paddingTop="@dimen/dp7"

android:text="@string/txt_record"

android:visibility="gone" />

android:id="@+id/img_expression"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginLeft="@dimen/dp12"

android:layout_marginStart="@dimen/dp12"

android:contentDescription="@null" />

android:id="@+id/img_other"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginEnd="@dimen/dp12"

android:layout_marginLeft="@dimen/dp12"

android:layout_marginRight="@dimen/dp12"

android:layout_marginStart="@dimen/dp12"

android:contentDescription="@null" />

android:id="@+id/layout_expression"

android:layout_width="match_parent"

android:layout_height="200dp"

android:layout_below="@+id/layout_release"

android:background="@color/MFFFFFF"

android:visibility="gone">

android:id="@+id/viewPager"

android:layout_width="match_parent"

android:layout_height="180dp" />

android:id="@+id/viewGroup"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_marginBottom="@dimen/dp10"

android:background="@color/MFFFFFF"

android:gravity="center_horizontal"

android:orientation="horizontal"

android:paddingLeft="@dimen/dp20"

android:paddingRight="@dimen/dp20" />

android:id="@+id/layout_other"

android:layout_width="match_parent"

android:layout_height="200dp"

android:layout_below="@+id/layout_release"

android:background="@color/M323535"

android:visibility="gone">

android:id="@+id/layout_other_item"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="@dimen/dp25"

android:orientation="horizontal">

android:id="@+id/im_chat_poto"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/dp16"

android:layout_marginStart="@dimen/dp16"

android:background="@mipmap/im_chat_poto"

android:contentDescription="@null" />

android:id="@+id/im_chat_camera"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/dp16"

android:layout_marginStart="@dimen/dp16"

android:background="@mipmap/im_chat_camera"

android:contentDescription="@null" />

android:id="@+id/im_chat_video"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/dp16"

android:layout_marginStart="@dimen/dp16"

android:background="@mipmap/im_chat_video"

android:contentDescription="@null" />

android:id="@+id/im_chat_location"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/dp16"

android:layout_marginStart="@dimen/dp16"

android:background="@mipmap/im_chat_poto"

android:contentDescription="@null" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/layout_other_item"

android:layout_marginEnd="@dimen/dp8"

android:layout_marginLeft="@dimen/dp8"

android:layout_marginRight="@dimen/dp8"

android:layout_marginStart="@dimen/dp8"

android:layout_marginTop="@dimen/dp7"

android:orientation="horizontal">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1"

android:gravity="center"

android:text="@string/newtype_photo"

android:textColor="@color/M969999"

android:textSize="@dimen/sp11" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1"

android:gravity="center"

android:text="@string/select_takephoto"

android:textColor="@color/M969999"

android:textSize="@dimen/sp11" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1"

android:gravity="center"

android:text="@string/newtype_video"

android:textColor="@color/M969999"

android:textSize="@dimen/sp11" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1"

android:gravity="center"

android:text="@string/im_location"

android:textColor="@color/M969999"

android:textSize="@dimen/sp11" />

android:id="@+id/scrollView_location_bitmap"

android:layout_width="match_parent"

android:layout_height="340dp"

android:layout_marginTop="@dimen/dp800">

android:layout_width="match_parent"

android:layout_height="340dp"

android:orientation="vertical"

tools:ignore="ScrollViewSize">

android:layout_width="match_parent"

android:layout_height="203dp">

android:id="@+id/map_location"

android:layout_width="match_parent"

android:layout_height="203dp"

android:layout_gravity="center" />

android:id="@+id/img_location_map"

android:layout_width="match_parent"

android:layout_height="203dp"

android:layout_gravity="center"

android:contentDescription="@null"

android:scaleType="centerCrop" />

xml布局中用到了自定义KeyboardListenRelativeLayout(判断软键盘显示和隐藏的自定义控件)

package com.motoband.ui.view;

/**

* Created by admin on 2016/4/22.

*/

import android.content.Context;

import android.util.AttributeSet;

import android.widget.RelativeLayout;

/**

* @author madreain

*/

public class KeyboardListenRelativeLayout extends RelativeLayout {

private static final String TAG = KeyboardListenRelativeLayout.class.getSimpleName();

public static final byte KEYBOARD_STATE_SHOW = -3;

public static final byte KEYBOARD_STATE_HIDE = -2;

public static final byte KEYBOARD_STATE_INIT = -1;

private boolean mHasInit = false;

private boolean mHasKeyboard = false;

private int mHeight;

private IOnKeyboardStateChangedListener onKeyboardStateChangedListener;

public KeyboardListenRelativeLayout(Context context) {

super(context);

}

public KeyboardListenRelativeLayout(Context context, AttributeSet attrs) {

super(context, attrs);

}

public KeyboardListenRelativeLayout(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public void setOnKeyboardStateChangedListener(IOnKeyboardStateChangedListener onKeyboardStateChangedListener) {

this.onKeyboardStateChangedListener = onKeyboardStateChangedListener;

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

super.onLayout(changed, l, t, r, b);

if(!mHasInit) {

mHasInit = true;

mHeight = b;

if(onKeyboardStateChangedListener != null) {

onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_INIT);

}

} else {

mHeight = mHeight < b ? b : mHeight;

}

if(mHasInit && mHeight > b) {

mHasKeyboard = true;

if(onKeyboardStateChangedListener != null) {

onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_SHOW);

}

}

if(mHasInit && mHasKeyboard && mHeight == b) {

mHasKeyboard = false;

if(onKeyboardStateChangedListener != null) {

onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_HIDE);

}

}

}

public interface IOnKeyboardStateChangedListener {

public void onKeyboardStateChanged(int state);

}

}

下面直接步入正题来介绍代码中实现的键盘切换:

package com.motoband.ui.activity;

import android.Manifest;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.Context;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.PixelFormat;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.media.MediaPlayer;

import android.media.MediaRecorder;

import android.net.Uri;

import android.os.Environment;

import android.os.PowerManager;

import android.os.SystemClock;

import android.provider.MediaStore;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.ContextCompat;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.view.WindowManager;

import android.widget.AbsListView;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.RelativeLayout;

import android.widget.ScrollView;

import android.widget.TextView;

import android.widget.Toast;

import com.amap.api.location.AMapLocation;

import com.amap.api.location.AMapLocationClient;

import com.amap.api.location.AMapLocationClientOption;

import com.amap.api.location.AMapLocationListener;

import com.amap.api.maps.AMap;

import com.amap.api.maps.AMapOptions;

import com.amap.api.maps.CameraUpdateFactory;

import com.amap.api.maps.LocationSource;

import com.amap.api.maps.MapView;

import com.amap.api.maps.UiSettings;

import com.amap.api.maps.model.BitmapDescriptorFactory;

import com.amap.api.maps.model.CameraPosition;

import com.amap.api.maps.model.LatLng;

import com.amap.api.maps.model.MyLocationStyle;

import com.amap.api.services.core.LatLonPoint;

import com.amap.api.services.geocoder.GeocodeResult;

import com.amap.api.services.geocoder.GeocodeSearch;

import com.amap.api.services.geocoder.RegeocodeQuery;

import com.amap.api.services.geocoder.RegeocodeResult;

import com.motoband.R;

import com.motoband.core.manager.LoginManager;

import com.motoband.core.manager.MBUserManager;

import com.motoband.core.model.MBUserModel;

import com.motoband.core.utils.MBUtil;

import com.motoband.mbcamera.camera.CameraConstants;

import com.motoband.ui.Voice.AudioRecorder;

import com.motoband.ui.Voice.RecordButton;

import com.motoband.ui.manager.PixelOrdpManager;

import com.motoband.ui.manager.SoftKeyboardManager;

import com.motoband.ui.manager.StatusBarManager;

import com.motoband.ui.view.KeyboardListenRelativeLayout;

import com.motoband.ui.view.MyEditText;

import com.motoband.ui.view.MyGridView;

import com.motoband.widget.RoundImageView;

import com.squareup.picasso.Picasso;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Locale;

public class ChatActivity extends AppCompatActivity implements LocationSource,AMapLocationListener,GeocodeSearch.OnGeocodeSearchListener {

private Intent intent;

private MBUserModel mbUserModel;

private MBUserModel meMBUserModel;

//聊天对象

private TextView txt_im_object_name;

private ListView listView;

// private ChatAdapter chatAdapter;

//信息内容

private MyEditText txt_im_message;

//键盘

//最外层判断软键盘是否弹出的

private KeyboardListenRelativeLayout keyboardListenRelativeLayout;

//语音

private ImageView img_voice;

//录音

private TextView txt_record;

private RelativeLayout layout_voice;

private ImageView img_im_microphone_state;

private ImageView img_im_microphone_sound_size;

private TextView txt_im_microphone_show_text;

//表情

private ImageView img_expression;

//其他 照片 拍摄 小视频 位置

private ImageView img_other;

//其他的显示

private RelativeLayout layout_other;

//照片

private ImageView im_chat_poto;

// 拍摄

private ImageView im_chat_camera;

//照片路径

private String picStringUrl;

// 小视频

private ImageView im_chat_video;

// 位置

private ImageView im_chat_location;

//位置的照片 //地图

private ScrollView scrollView_location_bitmap;

private MapView mapView;//骑行地图 TextureMapView

private AMap aMap;//骑行地图

private ImageView img_location_map;

//定位

private AMapLocationClient mLocationClient;

private LocationSource.OnLocationChangedListener mListener;

private LatLonPoint latLonPoint;

private GeocodeSearch geocodeSearch;

//获取的当前位置

private LocationManager locationManager;

private String locationProvider;

Location location;

//经纬度

private double latitude;

private double longitude;

//判断是点击的还是移动地图的 false 移动地图 true 点击

private boolean isFirst=false;

private boolean isShowMoveLocationCenter=true;

// 获取当前地图中心点的坐标

LatLng mTarget;

//地图中心点当前的具体位置

// private LatLng currentlatLng;

private String currentSpecificPosition;

// private ImageView img_bitmap;

//语音

private boolean isShowVoice = false;

//表情

private boolean isShowExpressionViewpager = false;

//其他

private boolean isShowOther = false;

private RelativeLayout layout_expression;

private ViewPager viewPager;

private ViewPagerAdapter viewPagerAdapter;

private List viewsList;

/**

* 将小圆点的图片用数组表示

*/

private ImageView[] imageViews;

//包裹小圆点的LinearLayout

private LinearLayout viewPoints;

private ImageView imageView;

//第一组表情

private MyGridView myGridViewExpresionOne;

ArrayList unicodeOne = new ArrayList();

//第二组表情

private MyGridView myGridViewExpresionTwo;

ArrayList unicodeTwo = new ArrayList();

//第三组表情

private MyGridView myGridViewExpresionThere;

ArrayList unicodeThere = new ArrayList();

private GridAdapter gridAdapter;

//当前选择的是录音 表情 其他 并且显示 1 2 3

private int currentSelect = 0;

// RecordButton button;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_chat);

//在进入有VideoView界面的Activity时会出现闪黑屏的情况(如论视频是否播放):

getWindow().setFormat(PixelFormat.TRANSLUCENT);

//状态栏颜色的设置

RelativeLayout linearLayout = (RelativeLayout) findViewById(R.id.linearlayout_main);

StatusBarManager.SetStatusBar(getWindow(), this, getResources(), "#1F2B29", linearLayout);

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

initMap(savedInstanceState);

initView();

initData();

initListener();

// button = (RecordButton) findViewById(R.id.btn_record);

// button.setAudioRecord(new AudioRecorder());

// button.setRecordListener(new RecordButton.RecordListener() {

// @Override

// public void recordEnd(String filePath) {

//

//

// }

// });

}

private void initView() {

// img_bitmap= (ImageView) findViewById(R.id.img_bitmap);

listView = (ListView) findViewById(R.id.listView);

txt_im_object_name = (TextView) findViewById(R.id.txt_im_object_name);

//说点什么

txt_im_message = (MyEditText) findViewById(R.id.txt_im_message);

txt_im_message.setSelection(txt_im_message.getText().length());

//录音

txt_record = (TextView) findViewById(R.id.txt_record);

//录音显示的控件

initVoice();

// wakeLock = ((PowerManager) getSystemService(Context.POWER_SERVICE))

// .newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "demo");

//键盘

initKeyboard();

}

//录音显示的控件

private void initVoice() {

layout_voice = (RelativeLayout) findViewById(R.id.layout_voice);

img_im_microphone_state = (ImageView) findViewById(R.id.img_im_microphone_state);

img_im_microphone_sound_size = (ImageView) findViewById(R.id.img_im_microphone_sound_size);

txt_im_microphone_show_text = (TextView) findViewById(R.id.txt_im_microphone_show_text);

}

private void initKeyboard() {

//输入框栏 用来判断软键盘是否弹出

keyboardListenRelativeLayout = (KeyboardListenRelativeLayout) findViewById(R.id.keyboardListenRelativeLayout);

layout_expression = (RelativeLayout) findViewById(R.id.layout_expression);

viewPager = (ViewPager) findViewById(R.id.viewPager);

viewPoints = (LinearLayout) findViewById(R.id.viewGroup);

img_voice = (ImageView) findViewById(R.id.img_voice);

img_expression = (ImageView) findViewById(R.id.img_expression);

img_other = (ImageView) findViewById(R.id.img_other);

layout_other = (RelativeLayout) findViewById(R.id.layout_other);

//照片

im_chat_poto = (ImageView) findViewById(R.id.im_chat_poto);

// 拍摄

im_chat_camera = (ImageView) findViewById(R.id.im_chat_camera);

// 小视频

im_chat_video = (ImageView) findViewById(R.id.im_chat_video);

// 位置

im_chat_location = (ImageView) findViewById(R.id.im_chat_location);

//宽度高度适配 6

WindowManager wm = ChatActivity.this.getWindowManager();

int width = wm.getDefaultDisplay().getWidth();

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

layoutParams.width = (width - PixelOrdpManager.dip2px(getBaseContext(), 16 * 5)) / 4;

layoutParams.height = (width - PixelOrdpManager.dip2px(getBaseContext(), 16 * 5)) / 4;

layoutParams.leftMargin = PixelOrdpManager.dip2px(getBaseContext(), 16);

im_chat_poto.setLayoutParams(layoutParams);

im_chat_camera.setLayoutParams(layoutParams);

im_chat_video.setLayoutParams(layoutParams);

im_chat_location.setLayoutParams(layoutParams);

//加载表情的

initViewPager();

//显示录音图标

img_voice.setImageResource(R.mipmap.im_chat_voice);

//显示表情图标

img_expression.setImageResource(R.mipmap.emoji_bw);

//显示其他图标

img_other.setImageResource(R.mipmap.im_chat_add_normal);

}

private void initData() {

intent = getIntent();

if (intent.getSerializableExtra("mbUserModel") != null) {

mbUserModel = (MBUserModel) intent.getSerializableExtra("mbUserModel");

meMBUserModel= MBUserManager.getInstance().getMBUser(LoginManager.userid);

txt_im_object_name.setText(mbUserModel.getNickname());

// chatAdapter = new ChatAdapter();

// listView.setAdapter(chatAdapter);

}

}

private void initListener() {

//返回

findViewById(R.id.img_finish).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

SoftKeyboardManager.HideSoftKeyboard(v);

finish();

}

});

//键盘的点击事件

initKeyboardListener();

// //播放语音

// findViewById(R.id.txt_start).setOnClickListener(new View.OnClickListener() {

// @Override

// public void onClick(View v) {

//

// mPlayer = new MediaPlayer();

// try{

// mPlayer.setDataSource(FileName);

// mPlayer.prepare();

// mPlayer.start();

// }catch(IOException e){

// Log.e("ChatActivity","播放失败");

// }

//

// }

// });

}

/**

* 检测Sdcard是否存在

*

* @return

*/

public static boolean isExitsSdcard() {

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))

return true;

else

return false;

}

// private PowerManager.WakeLock wakeLock;

/**

* 按住说话listener

*/

//语音操作对象

private MediaPlayer mPlayer = null;

private MediaRecorder mRecorder = null;

//语音文件保存路径

private String FileName = null;

class PressToSpeakListen implements View.OnTouchListener {

@SuppressLint({"ClickableViewAccessibility", "Wakelock"})

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

//语音的显示

layout_voice.setVisibility(View.VISIBLE);

//语音按钮点下

txt_record.setText("松开结束");

txt_record.setBackgroundResource(R.drawable.shape_im_chat_voice_down);

if (!isExitsSdcard()) {

Toast.makeText(ChatActivity.this, "发送语音需要sdcard支持!",

Toast.LENGTH_SHORT).show();

return false;

}

// try {

// v.setPressed(true);

wakeLock.acquire();

if (VoicePlayClickListener.isPlaying)

VoicePlayClickListener.currentPlayListener

.stopPlayVoice();

recordingContainer.setVisibility(View.VISIBLE);

recordingHint

.setText(getString(R.string.move_up_to_cancel));

recordingHint.setBackgroundColor(Color.TRANSPARENT);

voiceRecorder.startRecording(null, toChatUsername,

getApplicationContext());

// } catch (Exception e) {

// e.printStackTrace();

// v.setPressed(false);

if (wakeLock.isHeld())

wakeLock.release();

if (voiceRecorder != null)

voiceRecorder.discardRecording();

recordingContainer.setVisibility(View.INVISIBLE);

Toast.makeText(ChatActivity.this, R.string.recoding_fail,

Toast.LENGTH_SHORT).show();

// return false;

// }

//设置sdcard的路径

FileName = Environment.getExternalStorageDirectory().getAbsolutePath();

FileName += "/audiorecordtest.3gp";

mRecorder = new MediaRecorder();

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

mRecorder.setOutputFile(FileName);

mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

try {

mRecorder.prepare();

} catch (IOException e) {

Log.e("ChatActivity", "prepare() failed");

}

mRecorder.start();

return true;

case MotionEvent.ACTION_MOVE: {

if (event.getY() < 0) {

txt_im_microphone_show_text.setText("松指取消发送");

// txt_record.setText("松开结束");

// txt_record.setBackgroundResource(R.drawable.shape_im_chat_voice_down);

} else {

txt_im_microphone_show_text.setText("上滑取消发送");

// txt_record.setText("按住说话");

// txt_record.setBackgroundResource(R.drawable.shape_im_chat_voice_up);

}

return true;

}

case MotionEvent.ACTION_UP:

//语音的显示

layout_voice.setVisibility(View.GONE);

//语音按钮点下

txt_record.setText("按住说话");

txt_record.setBackgroundResource(R.drawable.shape_im_chat_voice_up);

// v.setPressed(false);

recordingContainer.setVisibility(View.INVISIBLE);

if (wakeLock.isHeld())

wakeLock.release();

// if (event.getY() < 0) {

// // discard the recorded audio.

voiceRecorder.discardRecording();

//

// } else {

// // stop recording and send voice file

try {

int length = voiceRecorder.stopRecoding();

if (length > 0) {

sendVoice(voiceRecorder.getVoiceFilePath(),

voiceRecorder

.getVoiceFileName(toChatUsername),

Integer.toString(length), false);

} else if (length == EMError.INVALID_FILE) {

Toast.makeText(getApplicationContext(), "无录音权限",

Toast.LENGTH_SHORT).show();

} else {

Toast.makeText(getApplicationContext(), "录音时间太短",

Toast.LENGTH_SHORT).show();

}

} catch (Exception e) {

e.printStackTrace();

Toast.makeText(ChatActivity.this, "发送失败,请检测服务器是否连接",

Toast.LENGTH_SHORT).show();

}

//

// }

mRecorder.stop();

mRecorder.release();

mRecorder = null;

return true;

default:

// recordingContainer.setVisibility(View.INVISIBLE);

// if (voiceRecorder != null)

// voiceRecorder.discardRecording();

return false;

}

}

}

private void initKeyboardListener() {

//录音的点击

txt_record.setOnTouchListener(new PressToSpeakListen());

//照片

im_chat_poto.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

intent.setType("image/*");

intent.setAction(Intent.ACTION_GET_CONTENT);

intent.addCategory(Intent.CATEGORY_OPENABLE);

startActivityForResult(intent, CameraConstants.REQUEST_PICK);

}

});

// 拍摄

im_chat_camera.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (!(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)) {

ActivityCompat.requestPermissions(ChatActivity.this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_CAMERA_PERMISSION);

} else {

startCamera();

}

}

});

// 小视频

im_chat_video.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

}

});

// 位置

im_chat_location.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

aMap.getMapScreenShot(new AMap.OnMapScreenShotListener() {

@Override

public void onMapScreenShot(Bitmap bitmap) {

img_location_map.setImageBitmap(bitmap);

SystemClock.sleep(100);

runOnUiThread(new Runnable() {

@Override

public void run() {

//照片

Bitmap bitmapFinish = getBitmapByView(scrollView_location_bitmap);

//照片路径

String filePath = savePic(bitmapFinish);

//经纬度 latitude; longitude;

//位置的描述 currentSpecificPosition

// img_bitmap.setImageBitmap(bitmapFinish);

Log.d("ChatActivity", filePath);

Log.d("ChatActivity", "latitude:" + latitude);

Log.d("ChatActivity", "longitude:" + longitude);

Log.d("ChatActivity", currentSpecificPosition);

// TODO: 2016/8/13 位置的信息

}

});

}

@Override

public void onMapScreenShot(Bitmap bitmap, int i) {

}

});

}

});

//键盘上边区域被点击键盘收回

listView.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

currentSelect = 0;

SoftKeyboardManager.HideSoftKeyboard(v);

//显示录音图标

img_voice.setImageResource(R.mipmap.im_chat_voice);

//显示表情图标

img_expression.setImageResource(R.mipmap.emoji_bw);

//显示其他图标

img_other.setImageResource(R.mipmap.im_chat_add_normal);

//表情 其他隐藏

layout_expression.setVisibility(View.GONE);

layout_other.setVisibility(View.GONE);

txt_im_message.setVisibility(View.VISIBLE);

txt_record.setVisibility(View.GONE);

return false;

}

});

listView.setOnScrollListener(new AbsListView.OnScrollListener() {

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

currentSelect = 0;

SoftKeyboardManager.HideSoftKeyboard(view);

//显示录音图标

img_voice.setImageResource(R.mipmap.im_chat_voice);

//显示表情图标

img_expression.setImageResource(R.mipmap.emoji_bw);

//显示其他图标

img_other.setImageResource(R.mipmap.im_chat_add_normal);

//表情 其他隐藏

layout_expression.setVisibility(View.GONE);

layout_other.setVisibility(View.GONE);

txt_im_message.setVisibility(View.VISIBLE);

txt_record.setVisibility(View.GONE);

}

@Override

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

}

});

//评论内容被点击时viewpager

txt_im_message.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

layout_expression.setVisibility(View.GONE);

isShowExpressionViewpager = false;

return false;

}

});

//录音

img_voice.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (isShowVoice == false) {

//显示键盘图标

img_voice.setImageResource(R.mipmap.im_chat_keyboard);

currentSelect = 1;

//显示录音

txt_record.setVisibility(View.VISIBLE);

//隐藏输入框

txt_im_message.setVisibility(View.GONE);

isShowVoice = true;

SoftKeyboardManager.HideSoftKeyboard(v);

} else if (isShowVoice == true) {

//显示录音图标

img_voice.setImageResource(R.mipmap.im_chat_voice);

currentSelect = 0;

//隐藏录音

txt_record.setVisibility(View.GONE);

//显示输入框

txt_im_message.setVisibility(View.VISIBLE);

isShowVoice = false;

SoftKeyboardManager.ShowSoftKeyboard(v, ChatActivity.this);

}

//隐藏表情

layout_expression.setVisibility(View.GONE);

// 隐藏其他

layout_other.setVisibility(View.GONE);

// //显示录音图标

// img_voice.setImageResource(R.mipmap.im_chat_voice);

//显示表情图标

img_expression.setImageResource(R.mipmap.emoji_bw);

//显示其他图标

img_other.setImageResource(R.mipmap.im_chat_add_normal);

}

});

//表情按钮

img_expression.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//显示输入框

txt_im_message.setVisibility(View.VISIBLE);

if (isShowExpressionViewpager == true) {

//显示表情图标

img_expression.setImageResource(R.mipmap.emoji_bw);

currentSelect = 0;

//隐藏表情输入框

layout_expression.setVisibility(View.GONE);

isShowExpressionViewpager = false;

SoftKeyboardManager.ShowSoftKeyboard(v, ChatActivity.this);

} else {

//显示键盘图标

img_expression.setImageResource(R.mipmap.im_chat_keyboard);

currentSelect = 2;

//显示表情输入框

// layout_expression.setVisibility(View.VISIBLE);

new Thread(new Runnable() {

@Override

public void run() {

SystemClock.sleep(200);

runOnUiThread(new Runnable() {

@Override

public void run() {

layout_expression.setVisibility(View.VISIBLE);

}

});

}

}).start();

isShowExpressionViewpager = true;

SoftKeyboardManager.HideSoftKeyboard(v);

}

//隐藏录音

txt_record.setVisibility(View.GONE);

// 隐藏其他

layout_other.setVisibility(View.GONE);

//显示录音图标

img_voice.setImageResource(R.mipmap.im_chat_voice);

//显示表情图标

// img_expression.setImageResource(R.mipmap.emoji_bw);

//显示其他图标

img_other.setImageResource(R.mipmap.im_chat_add_normal);

}

});

//其他

img_other.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//显示输入框

txt_im_message.setVisibility(View.VISIBLE);

if (isShowOther == false) {

//显示键盘图标

img_other.setImageResource(R.mipmap.im_chat_keyboard);

currentSelect = 3;

//显示其他

// layout_other.setVisibility(View.VISIBLE);

new Thread(new Runnable() {

@Override

public void run() {

SystemClock.sleep(200);

runOnUiThread(new Runnable() {

@Override

public void run() {

layout_other.setVisibility(View.VISIBLE);

}

});

}

}).start();

isShowOther = true;

SoftKeyboardManager.HideSoftKeyboard(v);

} else if (isShowOther == true) {

//显示其他图标

img_other.setImageResource(R.mipmap.im_chat_add_normal);

currentSelect = 0;

//隐藏其他

layout_other.setVisibility(View.GONE);

isShowOther = false;

SoftKeyboardManager.ShowSoftKeyboard(v, ChatActivity.this);

}

//隐藏录音

txt_record.setVisibility(View.GONE);

// 隐藏表情

layout_expression.setVisibility(View.GONE);

//显示录音图标

img_voice.setImageResource(R.mipmap.im_chat_voice);

//显示表情图标

img_expression.setImageResource(R.mipmap.emoji_bw);

//显示其他图标

// img_other.setImageResource(R.mipmap.im_chat_add_normal);

}

});

//判断软键盘显示隐藏

keyboardListenRelativeLayout.setOnKeyboardStateChangedListener(new KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener() {

@Override

public void onKeyboardStateChanged(int state) {

switch (state) {

case KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://软键盘隐藏

if (currentSelect == 0) {

//没有点击 录音 表情 其他

txt_im_message.setVisibility(View.VISIBLE);

txt_record.setVisibility(View.GONE);

layout_expression.setVisibility(View.GONE);

layout_other.setVisibility(View.GONE);

//语音

isShowVoice = false;

//表情

isShowExpressionViewpager = false;

//其他

isShowOther = false;

} else if (currentSelect == 1) {

//点击录音

txt_im_message.setVisibility(View.GONE);

txt_record.setVisibility(View.VISIBLE);

layout_expression.setVisibility(View.GONE);

layout_other.setVisibility(View.GONE);

//语音

isShowVoice = false;

//表情

isShowExpressionViewpager = false;

//其他

isShowOther = false;

} else if (currentSelect == 2) {

//点击表情

txt_im_message.setVisibility(View.VISIBLE);

txt_record.setVisibility(View.GONE);

layout_expression.setVisibility(View.VISIBLE);

layout_other.setVisibility(View.GONE);

//表情

isShowExpressionViewpager = true;

//语音

isShowVoice = false;

//其他

isShowOther = false;

} else if (currentSelect == 3) {

//点击其他

txt_im_message.setVisibility(View.VISIBLE);

txt_record.setVisibility(View.GONE);

layout_expression.setVisibility(View.GONE);

layout_other.setVisibility(View.VISIBLE);

//其他

isShowOther = true;

//语音

isShowVoice = false;

//表情

isShowExpressionViewpager = false;

}

break;

case KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://软键盘显示

//隐藏录音

txt_record.setVisibility(View.GONE);

// 隐藏表情

layout_expression.setVisibility(View.GONE);

//隐藏其他

layout_other.setVisibility(View.GONE);

isShowExpressionViewpager = false;

isShowVoice = false;

isShowOther = false;

break;

default:

break;

}

}

});

listView.setOnScrollListener(new AbsListView.OnScrollListener() {

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

switch (scrollState) {

// 当不滚动时

case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:

case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:

case AbsListView.OnScrollListener.SCROLL_STATE_FLING:

SoftKeyboardManager.HideSoftKeyboard(view);

layout_expression.setVisibility(View.GONE);

isShowExpressionViewpager = false;

break;

}

}

@Override

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

}

});

}

//聊天适配器

private class ChatAdapter extends BaseAdapter {

//类型

//聊天对象文字

private int TypeObjectCharacter = 0;

// 语音

private int TypeObjectVoice = 1;

// 照片

private int TypeObjectImg = 2;

// 位置

private int TypeObjectLocation = 3;

//自己文字

private int TypeMeCharacter = 4;

// 语音

private int TypeMeVoice = 5;

// 照片

private int TypeMeImg = 6;

// 位置

private int TypeMeLocation = 7;

@Override

public int getCount() {

return 100;

}

@Override

public Object getItem(int position) {

return null;

}

@Override

public long getItemId(int position) {

return 0;

}

@Override

public int getItemViewType(int position) {

// return super.getItemViewType(position);

if (position % 11 == 0) {

return TypeObjectCharacter;

} else if (position % 9 == 0) {

return TypeObjectVoice;

} else if (position % 8 == 0) {

return TypeObjectImg;

} else if (position % 7 == 0) {

return TypeObjectLocation;

} else if (position % 5 == 0) {

return TypeMeCharacter;

} else if (position % 3 == 0) {

return TypeMeVoice;

} else if (position % 2 == 0) {

return TypeMeImg;

} else {

return TypeMeLocation;

}

}

@Override

public int getViewTypeCount() {

return 8;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ObjectCharacterViewHolder objectCharacterViewHolder = null;

ObjectVoiceViewHolder objectVoiceViewHolder = null;

ObjectImgViewHolder objectImgViewHolder = null;

ObjectLocationViewHolder objectLocationViewHolder = null;

MeCharacterViewHolder meCharacterViewHolder = null;

MeVoiceViewHolder meVoiceViewHolder = null;

MeImgViewHolder meImgViewHolder = null;

MeLocationViewHolder meLocationViewHolder = null;

int Type = getItemViewType(position);

if (convertView == null) {

if (Type == TypeObjectCharacter) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_object_character, parent, false);

objectCharacterViewHolder = new ObjectCharacterViewHolder();

objectCharacterViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

objectCharacterViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

objectCharacterViewHolder.txt_im_chat_object_character = (TextView) convertView.findViewById(R.id.txt_im_chat_object_character);

convertView.setTag(objectCharacterViewHolder);

} else if (Type == TypeObjectVoice) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_object_voice, parent, false);

objectVoiceViewHolder = new ObjectVoiceViewHolder();

objectVoiceViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

objectVoiceViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

objectVoiceViewHolder.txt_im_chat_object_voice = (TextView) convertView.findViewById(R.id.txt_im_chat_object_voice);

objectVoiceViewHolder.img_im_chat_object_voice = (ImageView) convertView.findViewById(R.id.img_im_chat_object_voice);

objectVoiceViewHolder.txt_im_chat_object_voice_seconds = (TextView) convertView.findViewById(R.id.txt_im_chat_object_voice_seconds);

objectVoiceViewHolder.img_im_chat_object_voice_read_or_noread = (ImageView) convertView.findViewById(R.id.img_im_chat_object_voice_read_or_noread);

convertView.setTag(objectVoiceViewHolder);

} else if (Type == TypeObjectImg) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_object_img, parent, false);

objectImgViewHolder = new ObjectImgViewHolder();

objectImgViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

objectImgViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

objectImgViewHolder.img_im_chat_object_img = (ImageView) convertView.findViewById(R.id.img_im_chat_object_img);

convertView.setTag(objectImgViewHolder);

} else if (Type == TypeObjectLocation) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_object_location, parent, false);

objectLocationViewHolder = new ObjectLocationViewHolder();

objectLocationViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

objectLocationViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

objectLocationViewHolder.img_im_chat_object_location = (ImageView) convertView.findViewById(R.id.img_im_chat_object_location);

convertView.setTag(objectLocationViewHolder);

} else if (Type == TypeMeCharacter) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_me_character, parent, false);

meCharacterViewHolder = new MeCharacterViewHolder();

meCharacterViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

meCharacterViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

meCharacterViewHolder.txt_im_chat_me_character = (TextView) convertView.findViewById(R.id.txt_im_chat_me_character);

convertView.setTag(meCharacterViewHolder);

} else if (Type == TypeMeVoice) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_me_voice, parent, false);

meVoiceViewHolder = new MeVoiceViewHolder();

meVoiceViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

meVoiceViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

meVoiceViewHolder.txt_im_chat_me_voice = (TextView) convertView.findViewById(R.id.txt_im_chat_me_voice);

meVoiceViewHolder.img_im_chat_me_voice = (ImageView) convertView.findViewById(R.id.img_im_chat_me_voice);

meVoiceViewHolder.txt_im_chat_me_voice_seconds = (TextView) convertView.findViewById(R.id.txt_im_chat_me_voice_seconds);

meVoiceViewHolder.img_im_chat_me_voice_read_or_noread = (ImageView) convertView.findViewById(R.id.img_im_chat_me_voice_read_or_noread);

convertView.setTag(meVoiceViewHolder);

} else if (Type == TypeMeImg) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_me_img, parent, false);

meImgViewHolder = new MeImgViewHolder();

meImgViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

meImgViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

meImgViewHolder.img_im_chat_me_img = (ImageView) convertView.findViewById(R.id.img_im_chat_me_img);

convertView.setTag(meImgViewHolder);

} else if (Type == TypeMeLocation) {

convertView = getLayoutInflater().inflate(R.layout.inflate_im_chat_me_location, parent, false);

meLocationViewHolder = new MeLocationViewHolder();

meLocationViewHolder.txt_im_chat_time = (TextView) convertView.findViewById(R.id.txt_im_chat_time);

meLocationViewHolder.img_head_portrait = (RoundImageView) convertView.findViewById(R.id.img_head_portrait);

meLocationViewHolder.img_im_chat_me_location = (ImageView) convertView.findViewById(R.id.img_im_chat_me_location);

convertView.setTag(meLocationViewHolder);

}

} else {

if (Type == TypeObjectCharacter) {

objectCharacterViewHolder = (ObjectCharacterViewHolder) convertView.getTag();

} else if (Type == TypeObjectVoice) {

objectVoiceViewHolder = (ObjectVoiceViewHolder) convertView.getTag();

} else if (Type == TypeObjectImg) {

objectImgViewHolder = (ObjectImgViewHolder) convertView.getTag();

} else if (Type == TypeObjectLocation) {

objectLocationViewHolder = (ObjectLocationViewHolder) convertView.getTag();

} else if (Type == TypeMeCharacter) {

meCharacterViewHolder = (MeCharacterViewHolder) convertView.getTag();

} else if (Type == TypeMeVoice) {

meVoiceViewHolder = (MeVoiceViewHolder) convertView.getTag();

} else if (Type == TypeMeImg) {

meImgViewHolder = (MeImgViewHolder) convertView.getTag();

} else if (Type == TypeMeLocation) {

meLocationViewHolder = (MeLocationViewHolder) convertView.getTag();

}

}

//设置数据

if (Type == TypeObjectCharacter) {

setObjectCharacterData(objectCharacterViewHolder);

} else if (Type == TypeObjectVoice) {

setObjectVoiceData(objectVoiceViewHolder);

} else if (Type == TypeObjectImg) {

setObjectImgData(objectImgViewHolder);

} else if (Type == TypeObjectLocation) {

setObjectLocationData(objectLocationViewHolder);

} else if (Type == TypeMeCharacter) {

setMeCharacterData(meCharacterViewHolder);

} else if (Type == TypeMeVoice) {

setMeVoiceData(meVoiceViewHolder);

} else if (Type == TypeMeImg) {

setMeImgData(meImgViewHolder);

} else if (Type == TypeMeLocation) {

setMeLocationData(meLocationViewHolder);

}

return convertView;

}

//设置对象文字

private void setObjectCharacterData(ObjectCharacterViewHolder objectCharacterViewHolder) {

objectCharacterViewHolder.txt_im_chat_time.setText("2013111");

Picasso.with(ChatActivity.this).load(mbUserModel.getHeadurl() + "!thumb").into(objectCharacterViewHolder.img_head_portrait);

objectCharacterViewHolder.txt_im_chat_object_character.setText("哈哈哈老客户卡哈斯的发生哈哈镜和司法斯蒂芬回来好伐啦开始的发生");

}

//设置对象语音

private void setObjectVoiceData(ObjectVoiceViewHolder objectVoiceViewHolder) {

objectVoiceViewHolder.txt_im_chat_time.setText("2013111");

Picasso.with(ChatActivity.this).load(mbUserModel.getHeadurl() + "!thumb").into(objectVoiceViewHolder.img_head_portrait);

}

//设置对象的照片

private void setObjectImgData(ObjectImgViewHolder objectImgViewHolder) {

objectImgViewHolder.txt_im_chat_time.setText("32123132");

Picasso.with(ChatActivity.this).load(mbUserModel.getHeadurl() + "!thumb").into(objectImgViewHolder.img_head_portrait);

}

//设置对象位置的

private void setObjectLocationData(ObjectLocationViewHolder objectLocationViewHolder) {

objectLocationViewHolder.txt_im_chat_time.setText("32123132");

Picasso.with(ChatActivity.this).load(mbUserModel.getHeadurl() + "!thumb").into(objectLocationViewHolder.img_head_portrait);

}

//设置自己的文字

private void setMeCharacterData(MeCharacterViewHolder meCharacterViewHolder) {

meCharacterViewHolder.txt_im_chat_time.setText("465654564");

Picasso.with(ChatActivity.this).load(meMBUserModel.getHeadurl() + "!thumb").into(meCharacterViewHolder.img_head_portrait);

meCharacterViewHolder.txt_im_chat_me_character.setText("离开家电费卡坚实的法律会计师");

}

//设置自己的语音

private void setMeVoiceData(MeVoiceViewHolder meVoiceViewHolder) {

meVoiceViewHolder.txt_im_chat_time.setText("465654564");

Picasso.with(ChatActivity.this).load(meMBUserModel.getHeadurl() + "!thumb").into(meVoiceViewHolder.img_head_portrait);

// meVoiceViewHolder.img_im_chat_me_voice

}

//设置自己的照片

private void setMeImgData(MeImgViewHolder meImgViewHolder) {

meImgViewHolder.txt_im_chat_time.setText("32123132");

Picasso.with(ChatActivity.this).load(meMBUserModel.getHeadurl() + "!thumb").into(meImgViewHolder.img_head_portrait);

// meImgViewHolder.img_im_chat_me_img

}

//设置自己的位置

private void setMeLocationData(MeLocationViewHolder meLocationViewHolder) {

meLocationViewHolder.txt_im_chat_time.setText("51321321");

Picasso.with(ChatActivity.this).load(meMBUserModel.getHeadurl() + "!thumb").into(meLocationViewHolder.img_head_portrait);

// meLocationViewHolder.img_im_chat_me_location

}

//聊天对象文字

private class ObjectCharacterViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private TextView txt_im_chat_object_character;

}

// 语音

private class ObjectVoiceViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private TextView txt_im_chat_object_voice;

private ImageView img_im_chat_object_voice;

private TextView txt_im_chat_object_voice_seconds;

private ImageView img_im_chat_object_voice_read_or_noread;

}

// 照片

private class ObjectImgViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private ImageView img_im_chat_object_img;

}

// 位置

private class ObjectLocationViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private ImageView img_im_chat_object_location;

}

//自己文字

private class MeCharacterViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private TextView txt_im_chat_me_character;

}

// 语音

private class MeVoiceViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private TextView txt_im_chat_me_voice;

private ImageView img_im_chat_me_voice;

private TextView txt_im_chat_me_voice_seconds;

private ImageView img_im_chat_me_voice_read_or_noread;

}

// 照片

private class MeImgViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private ImageView img_im_chat_me_img;

}

// 位置

private class MeLocationViewHolder {

private TextView txt_im_chat_time;

private RoundImageView img_head_portrait;

private ImageView img_im_chat_me_location;

}

}

private void initViewPager() {

viewsList = new ArrayList();

View view1 = LayoutInflater.from(this).inflate(R.layout.inflate_expression_one, null);

View view2 = LayoutInflater.from(this).inflate(R.layout.inflate_expression_two, null);

View view3 = LayoutInflater.from(this).inflate(R.layout.inflate_expression_there, null);

viewsList.add(view1);

viewsList.add(view2);

viewsList.add(view3);

//添加小圆点的图片

imageViews = new ImageView[viewsList.size()];

for (int i = 0; i < viewsList.size(); i++) {

imageView = new ImageView(this);

//设置小圆点imageview的参数

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(20, 20);

layoutParams.setMargins(10, 0, 10, 0);

// imageView.setLayoutParams(new ViewGroup.LayoutParams(20,20));//创建一个宽高均为20 的布局

imageView.setLayoutParams(layoutParams);//创建一个宽高均为20 的布局

imageView.setPadding(20, 0, 20, 0);

//默认选中的是第一张图片,此时第一个小圆点是选中状态,其他不是

if (i == 0) {

imageView.setBackgroundResource(R.drawable.shape_expression_click);

} else {

imageView.setBackgroundResource(R.drawable.shape_expression_unclick);

}

//将imageviews添加到小圆点视图组

viewPoints.addView(imageView);

imageViews[i] = imageView;

}

viewPagerAdapter = new ViewPagerAdapter(viewsList);

viewPager.setAdapter(viewPagerAdapter);

viewPager.setOnPageChangeListener(new GuidePageChangeListener());

//设置第一组表情

initGridViewExpresionOne(view1);

//设置第二组表情

initGridViewExpresionTwo(view2);

//设置第三组表情

initGridViewExpresionThere(view3);

}

private String getEmojiStringByUnicode(int unicode) {

return new String(Character.toChars(unicode));

}

//键盘

private void initGridViewExpresionOne(View view) {

myGridViewExpresionOne = (MyGridView) view.findViewById(R.id.gridview_expression);

gridAdapter = new GridAdapter(ChatActivity.this);

unicodeOne.add(0, 0x1F604);

unicodeOne.add(1, 0x1F60A);

unicodeOne.add(2, 0x1F603);

unicodeOne.add(3, 0x263A);

unicodeOne.add(4, 0x1F609);

unicodeOne.add(5, 0x1F60D);

unicodeOne.add(6, 0x1F618);

unicodeOne.add(7, 0x1F61A);

unicodeOne.add(8, 0x1F633);

unicodeOne.add(9, 0x1F60C);

unicodeOne.add(10, 0x1F601);

unicodeOne.add(11, 0x1F61C);

unicodeOne.add(12, 0x1F61D);

unicodeOne.add(13, 0x1F612);

unicodeOne.add(14, 0x1F60F);

unicodeOne.add(15, 0x1F613);

unicodeOne.add(16, 0x1F614);

unicodeOne.add(17, 0x1F61E);

unicodeOne.add(18, 0x1F616);

unicodeOne.add(19, 0x1F625);

unicodeOne.add(20, 0x1F630);

unicodeOne.add(21, 0x1F628);

unicodeOne.add(22, 0x1F623);

unicodeOne.add(23, 0x1F622);

unicodeOne.add(24, 0x1F62D);

unicodeOne.add(25, 0x1F602);

unicodeOne.add(26, 0x1F632);

unicodeOne.add(27, 0x1F631);

myGridViewExpresionOne.setAdapter(gridAdapter);

gridAdapter.setDataToAdapter(unicodeOne);

gridAdapter.notifyDataSetChanged();

//点击选择是那一项

myGridViewExpresionOne.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

if (position == 27) {

// Toast.makeText(DynamicDetailActivity.this, "删除" + position, Toast.LENGTH_SHORT).show();

if (txt_im_message.getText().toString().length() > 0) {

if (txt_im_message.getText().toString().length() == 1) {

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 1);

txt_im_message.setText(commentString);

} else {

int lastIndex = txt_im_message.getText().toString().lastIndexOf("�");

if (lastIndex == -1) {

//判断当前的是不是表情

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 2);

txt_im_message.setText(commentString);

} else {

//判断当前的是不是表情

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 1);

txt_im_message.setText(commentString);

}

}

}

} else {

int unicodeJoy = unicodeOne.get(position);

String emojiString = getEmojiStringByUnicode(unicodeJoy);

txt_im_message.setText(txt_im_message.getText().toString().trim() + emojiString);

}

txt_im_message.setSelection(txt_im_message.getText().length());

}

});

}

private void initGridViewExpresionTwo(View view) {

myGridViewExpresionTwo = (MyGridView) view.findViewById(R.id.gridview_expression);

gridAdapter = new GridAdapter(ChatActivity.this);

unicodeTwo.add(0, 0x1F631);

unicodeTwo.add(1, 0x1F620);

unicodeTwo.add(2, 0x1F621);

unicodeTwo.add(3, 0x1F62A);

unicodeTwo.add(4, 0x1F637);

unicodeTwo.add(5, 0x1F47F);

unicodeTwo.add(6, 0x1F47D);

unicodeTwo.add(7, 0x1F49B);

unicodeTwo.add(8, 0x1F499);

unicodeTwo.add(9, 0x1F49C);

unicodeTwo.add(10, 0x1F497);

unicodeTwo.add(11, 0x1F49A);

unicodeTwo.add(12, 0x2764);

unicodeTwo.add(13, 0x1F494);

unicodeTwo.add(14, 0x1F493);

unicodeTwo.add(15, 0x1F498);

unicodeTwo.add(16, 0x2728);

unicodeTwo.add(17, 0x2B50);

unicodeTwo.add(18, 0x1F31F);

unicodeTwo.add(19, 0x1F4A2);

unicodeTwo.add(20, 0x2757);

unicodeTwo.add(21, 0x2755);

unicodeTwo.add(22, 0x2753);

unicodeTwo.add(23, 0x2754);

unicodeTwo.add(24, 0x1F4A4);

unicodeTwo.add(25, 0x1F4A8);

unicodeTwo.add(26, 0x1F4A6);

unicodeTwo.add(27, 0x1F631);

myGridViewExpresionTwo.setAdapter(gridAdapter);

gridAdapter.setDataToAdapter(unicodeTwo);

gridAdapter.notifyDataSetChanged();

//点击选择是那一项

myGridViewExpresionTwo.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

if (position == 27) {

if (txt_im_message.getText().toString().length() > 0) {

if (txt_im_message.getText().toString().length() == 1) {

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 1);

txt_im_message.setText(commentString);

} else {

int lastIndex = txt_im_message.getText().toString().lastIndexOf("�");

if (lastIndex == -1) {

//判断当前的是不是表情

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 2);

txt_im_message.setText(commentString);

} else {

//判断当前的是不是表情

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 1);

txt_im_message.setText(commentString);

}

}

}

} else {

int unicodeJoy = unicodeTwo.get(position);

String emojiString = getEmojiStringByUnicode(unicodeJoy);

txt_im_message.setText(txt_im_message.getText().toString().trim() + emojiString);

}

txt_im_message.setSelection(txt_im_message.getText().length());

}

});

}

private void initGridViewExpresionThere(View view) {

myGridViewExpresionThere = (MyGridView) view.findViewById(R.id.gridview_expression);

gridAdapter = new GridAdapter(ChatActivity.this);

unicodeThere.add(0, 0x1F3B6);

unicodeThere.add(1, 0x1F3B5);

unicodeThere.add(2, 0x1F525);

unicodeThere.add(3, 0x1F4A9);

unicodeThere.add(4, 0x1F44D);

unicodeThere.add(5, 0x1F44E);

unicodeThere.add(6, 0x1F44C);

unicodeThere.add(7, 0x1F44A);

unicodeThere.add(8, 0x270A);

unicodeThere.add(9, 0x270C);

unicodeThere.add(10, 0x1F44B);

unicodeThere.add(11, 0x270B);

unicodeThere.add(12, 0x1F450);

unicodeThere.add(13, 0x1F446);

unicodeThere.add(14, 0x1F447);

unicodeThere.add(15, 0x1F449);

unicodeThere.add(16, 0x1F448);

unicodeThere.add(17, 0x1F64C);

unicodeThere.add(18, 0x1F64F);

unicodeThere.add(19, 0x261D);

unicodeThere.add(20, 0x1F44F);

unicodeThere.add(21, 0x1F4AA);

unicodeThere.add(22, 0x1F6B6);

unicodeThere.add(23, 0x1F3C3);

unicodeThere.add(24, 0x1F46B);

unicodeThere.add(25, 0x1F483);

unicodeThere.add(26, 0x1F46F);

unicodeThere.add(27, 0x1F631);

myGridViewExpresionThere.setAdapter(gridAdapter);

gridAdapter.setDataToAdapter(unicodeThere);

gridAdapter.notifyDataSetChanged();

//点击选择是那一项

myGridViewExpresionThere.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

if (position == 27) {

if (txt_im_message.getText().toString().length() > 0) {

if (txt_im_message.getText().toString().length() == 1) {

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 1);

txt_im_message.setText(commentString);

} else {

int lastIndex = txt_im_message.getText().toString().lastIndexOf("�");

if (lastIndex == -1) {

//判断当前的是不是表情

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 2);

txt_im_message.setText(commentString);

} else {

//判断当前的是不是表情

String commentString = txt_im_message.getText().toString().substring(0,

txt_im_message.getText().toString().length() - 1);

txt_im_message.setText(commentString);

}

}

}

} else {

int unicodeJoy = unicodeThere.get(position);

String emojiString = getEmojiStringByUnicode(unicodeJoy);

txt_im_message.setText(txt_im_message.getText().toString().trim() + emojiString);

}

txt_im_message.setSelection(txt_im_message.getText().length());

}

});

}

class GuidePageChangeListener implements ViewPager.OnPageChangeListener {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

for (int i = 0; i < imageViews.length; i++) {

imageViews[position].setBackgroundResource(R.drawable.shape_expression_click);

//不是当前选中的page,其小圆点设置为未选中的状态

if (position != i) {

imageViews[i].setBackgroundResource(R.drawable.shape_expression_unclick);

}

}

}

@Override

public void onPageScrollStateChanged(int state) {

}

}

//适配器

public class ViewPagerAdapter extends PagerAdapter {

private List views;

public ViewPagerAdapter(List views) {

this.views = views;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

// super.destroyItem(container, position, object);

container.removeView(views.get(position));

}

@Override

public void finishUpdate(ViewGroup container) {

// super.finishUpdate(container);

}

@Override

public int getCount() {

if (views != null) {

return views.size();

}

return 0;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(views.get(position));

return views.get(position);

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

// return false;

}

}

//表情适配器

private class GridAdapter extends BaseAdapter {

private LayoutInflater layoutInflater;

ArrayList unicodeList = new ArrayList();

public void setDataToAdapter(ArrayList picdatas) {

if (picdatas != null) {

unicodeList.clear();

unicodeList.addAll(picdatas);

}

}

public GridAdapter(Context context) {

layoutInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

if (unicodeList == null) {

return 0;

}

return unicodeList.size();

}

@Override

public Object getItem(int position) {

return unicodeList.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

final HodelView hodelView;

if (convertView == null) {

convertView = layoutInflater.inflate(R.layout.inflate_expression, parent, false);

hodelView = new HodelView();

hodelView.txt_expresion = (TextView) convertView.findViewById(R.id.txt_expresion);

convertView.setTag(hodelView);

} else {

hodelView = (HodelView) convertView.getTag();

}

// 设置表情数据

if (unicodeList.size() > 0) {

if (position < unicodeList.size() - 1) {

int unicodeJoy = unicodeList.get(position);

String emojiString = getEmojiStringByUnicode(unicodeJoy);

hodelView.txt_expresion.setText(emojiString);

} else {

// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(PixelOrdpManager.dip2px(getBaseContext(),30),

// PixelOrdpManager.dip2px(getBaseContext(),20));

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

params.setMargins(PixelOrdpManager.dip2px(getBaseContext(), 7),

PixelOrdpManager.dip2px(getBaseContext(), 12),

PixelOrdpManager.dip2px(getBaseContext(), 7),

PixelOrdpManager.dip2px(getBaseContext(), 12)

);

hodelView.txt_expresion.setLayoutParams(params);

// hodelView.txt_expresion.setGravity(View.TEXT_ALIGNMENT_CENTER);

hodelView.txt_expresion.setBackgroundResource(R.mipmap.delete_emoji);

}

}

return convertView;

}

private String getEmojiStringByUnicode(int unicode) {

return new String(Character.toChars(unicode));

}

public class HodelView {

TextView txt_expresion;

}

}

public static final int REQUEST_CODE_CAMERA_PERMISSION = 106;

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

switch (requestCode) {

case REQUEST_CODE_CAMERA_PERMISSION:

if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

startCamera();

} else {

if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage("缺少“相机”权限");

builder.setPositiveButton("知道了", null);

builder.setCancelable(false);

builder.show();

} else {

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage("缺少“相机”权限\n请到\"工具\"->\"应用\"->\"摩托邦骑行\"->\"权限\"中进行设置");

builder.setPositiveButton("知道了", null);

builder.setCancelable(false);

builder.show();

}

}

break;

}

}

private Uri imageUri;

private void startCamera() {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

File fileFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera");

if (!fileFolder.exists()) {

boolean mkdirs = fileFolder.mkdirs();

if (!mkdirs) {

return;

}

}

imageUri = Uri.fromFile(new File(fileFolder, System.currentTimeMillis() + ".jpg"));

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(intent, CameraConstants.REQUEST_TAKE);

}

/***

* 地图模块获取位置

* @param savedInstanceState

*/

private void initMap(Bundle savedInstanceState) {

scrollView_location_bitmap= (ScrollView) findViewById(R.id.scrollView_location_bitmap);

img_location_map= (ImageView) findViewById(R.id.img_location_map);

mapView = (MapView) findViewById(R.id.map_location);

mapView.onCreate(savedInstanceState);

if (aMap == null) {

aMap = mapView.getMap();

}

UiSettings mUiSettings = aMap.getUiSettings();

mUiSettings.setZoomControlsEnabled(false);// 是否显示放大缩小按钮

mUiSettings.setMyLocationButtonEnabled(false);// 是否显示定位按钮

mUiSettings.setCompassEnabled(false);// 是否显示指南针

mUiSettings.setScaleControlsEnabled(false); // 是否显示比例尺

mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);// logo位置

/**

* 自定义定位图标

*/

setMyLocationStyle();

/**

* 设置定位资源

*/

aMap.setLocationSource(this);

aMap.setMyLocationEnabled(true);

aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);

aMap.moveCamera(CameraUpdateFactory.zoomTo(16));

getLocation();

//准确位置获取

geocodeSearch = new GeocodeSearch(ChatActivity.this);

geocodeSearch.setOnGeocodeSearchListener(ChatActivity.this);

getAddress(latLonPoint);

/**

* 设置地图加载完成回调

*/

aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {

@Override

public void onMapLoaded() {

/**

* 设置缩放级别为16

*/

aMap.moveCamera(CameraUpdateFactory.zoomTo(16));

aMap.showMapText(true);

aMap.showIndoorMap(false);

//移动地图

aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {

@Override

public void onCameraChange(CameraPosition cameraPosition) {

}

@Override

public void onCameraChangeFinish(CameraPosition cameraPosition) {

if(isFirst==false){

// 获取当前地图中心点的坐标

mTarget = aMap.getCameraPosition().target;

// currentlatLng=mTarget;

//准确位置获取

geocodeSearch = new GeocodeSearch(ChatActivity.this);

geocodeSearch.setOnGeocodeSearchListener(ChatActivity.this);

latLonPoint = new LatLonPoint(mTarget.latitude, mTarget.longitude);

getAddress(latLonPoint);

isFirst=true;

//第一次定位移动到定位点作为地图的中心点

if(isShowMoveLocationCenter==true){

aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);

isShowMoveLocationCenter=false;

}

}

}

});

}

});

}

/**

* 自定义定位图标

*/

private void setMyLocationStyle() {

MyLocationStyle myLocationStyle = new MyLocationStyle();// 自定义系统定位小蓝点

myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.o_map));// 设置小蓝点的图标

myLocationStyle.strokeColor(Color.TRANSPARENT);// 设置圆形的边框颜色

myLocationStyle.radiusFillColor(Color.TRANSPARENT);// 设置圆形的填充颜色

myLocationStyle.anchor(0.5f, 0.5f);// 设置小蓝点的锚点

myLocationStyle.strokeWidth(0);// 设置圆形的边框粗细

aMap.setMyLocationStyle(myLocationStyle);

}

private void getLocation() {

//经纬度获取

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

List providers = locationManager.getProviders(true);

if (providers.contains(LocationManager.NETWORK_PROVIDER)) {

locationProvider = LocationManager.NETWORK_PROVIDER;

} else if (providers.contains(LocationManager.GPS_PROVIDER)) {//GPS的定位放在第一个 得不到数据

locationProvider = LocationManager.GPS_PROVIDER;

} else {

return;

}

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;

}

location = locationManager.getLastKnownLocation(locationProvider);

if (location != null) {

ShowLocation(location);

latLonPoint = new LatLonPoint(location.getLatitude(), location.getLongitude());

} else {

}

locationManager.requestLocationUpdates(locationProvider, 0, 0, locationListener);

}

LocationListener locationListener = new LocationListener() {

@Override

public void onLocationChanged(Location location) {

ShowLocation(location);

}

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override

public void onProviderEnabled(String provider) {

}

@Override

public void onProviderDisabled(String provider) {

}

};

private void ShowLocation(Location location) {

latitude = location.getLatitude();

longitude = location.getLongitude();

}

@Override

public void activate(OnLocationChangedListener onLocationChangedListener) {

mListener = onLocationChangedListener;

if (mLocationClient == null) {

mLocationClient = new AMapLocationClient(MBUtil.getContext());

AMapLocationClientOption mLocationOption = new AMapLocationClientOption();

mLocationClient.setLocationListener(this);

mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

mLocationClient.setLocationOption(mLocationOption);

mLocationClient.startLocation();

}

}

@Override

public void deactivate() {

mListener = null;

if (mLocationClient != null) {

mLocationClient.stopLocation();

mLocationClient.onDestroy();

}

mLocationClient = null;

}

@Override

public void onLocationChanged(AMapLocation aMapLocation) {

if (mListener != null && aMapLocation != null) {

if (aMapLocation.getErrorCode() == 0) {

mListener.onLocationChanged(aMapLocation);// 显示系统蓝点

latitude = aMapLocation.getLatitude();// 纬度

longitude = aMapLocation.getLongitude();// 经度

// TODO: 2016/6/2

} else {

String errText = "定位失败," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo();

System.out.println(errText);

}

} else {

}

}

@Override

public void onRegeocodeSearched(RegeocodeResult result, int rCode) {

if (rCode == 1000) {

if (result != null && result.getRegeocodeAddress() != null && result.getRegeocodeAddress().getFormatAddress() != null) {

String province = result.getRegeocodeAddress().getProvince();

String district = result.getRegeocodeAddress().getDistrict();

String township = result.getRegeocodeAddress().getTownship();

String neighborhood = result.getRegeocodeAddress().getNeighborhood();

//当前具体位置

currentSpecificPosition = result.getRegeocodeAddress().getFormatAddress();

} else {

Toast.makeText(ChatActivity.this, "定位失败,请重试", Toast.LENGTH_SHORT);

}

} else if (rCode == 27) {

Toast.makeText(ChatActivity.this, "定位失败,请重试", Toast.LENGTH_SHORT);

} else if (rCode == 32) {

Toast.makeText(ChatActivity.this, "定位失败,请重试", Toast.LENGTH_SHORT);

} else {

Toast.makeText(ChatActivity.this, "定位失败,请重试", Toast.LENGTH_SHORT);

}

}

@Override

public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {

}

/**

* 逆地理编码

*/

public void getAddress(final LatLonPoint latLonPoint) {

RegeocodeQuery regeocodeQuery = new RegeocodeQuery(latLonPoint, 200, GeocodeSearch.AMAP);

geocodeSearch.getFromLocationAsyn(regeocodeQuery);

}

/***

* scrollView截图

*

* @param scrollView

* @return

*/

public static Bitmap getBitmapByView(ScrollView scrollView) {

int h = 0;

Bitmap bitmap = null;

for (int i = 0; i < scrollView.getChildCount(); i++) {

h += scrollView.getChildAt(i).getHeight();

scrollView.getChildAt(i).setBackgroundResource(R.mipmap.riding_report);

// scrollView.getChildAt(i).setBackgroundColor(

// Color.parseColor("0xFFFFFFFF"));

}

bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,

Bitmap.Config.RGB_565);

final Canvas canvas = new Canvas(bitmap);

scrollView.draw(canvas);

return bitmap;

}

/**

* 保存到sdcard

*

* @param b

* @return

*/

public static String savePic(Bitmap b) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss",

Locale.US);

File outfile = new File("/sdcard/image");

// 如果文件不存在,则创建一个新文件

if (!outfile.isDirectory()) {

try {

outfile.mkdir();

} catch (Exception e) {

e.printStackTrace();

}

}

String fname = outfile + "/" + sdf.format(new Date()) + ".png";

FileOutputStream fos = null;

try {

fos = new FileOutputStream(fname);

if (null != fos) {

b.compress(Bitmap.CompressFormat.PNG, 90, fos);

fos.flush();

fos.close();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return fname;

}

public static final int CHOOSE_IMAGE = 3;

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == CameraConstants.REQUEST_TAKE && resultCode == Activity.RESULT_OK) {

Log.d("ChatActivity", "imageUri:" + imageUri);

// Picasso.with(ChatActivity.this).load(imageUri).into(img_bitmap);

// Intent intent = new Intent(this, CropPhotoActivity.class);

// intent.setData(imageUri);

// intent.putExtra("exist", true);

// startActivityForResult(intent, CHOOSE_IMAGE);

}

if (requestCode == CameraConstants.REQUEST_PICK && resultCode == Activity.RESULT_OK) {

// Picasso.with(ChatActivity.this).load(data.getData()).into(img_bitmap);

Log.d("ChatActivity", "data.getData():" + data.getData());

// Uri uri = data.getData();

// Intent intent = new Intent(this, CropPhotoActivity.class);

// intent.setData(uri);

// intent.putExtra("exist", true);

// startActivityForResult(intent, CHOOSE_IMAGE);

}

//纯照片

// if (requestCode == CHOOSE_IMAGE && resultCode == RESULT_OK) {

// picStringUrl = data.getStringExtra("filePath");

// Log.d("ChatActivity", picStringUrl);

//

// }

super.onActivityResult(requestCode, resultCode, data);

}

}

闲暇之余把相册选取照片,拍摄也给大家提供了,另外我基于高德地图把位置的获取也做了(位置的照片,照片的路径,位置的描述及经纬度都获取了,大家可以自行借鉴,选取自己所需的)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android 表情键盘切换,Android仿微信键盘切换效果相关推荐

  1. 源码推荐:仿写映客直播 ,快速切换主题 ,星星评分控件,表格样式,可以横向移动的表格, 仿微信键盘-

    仿写映客直播(上传者:五仁月饼) 工作之余写的,基于IJKPlayer播放,对内存做了处理.目前已完成直播列表和直播间的搭建,后续还会慢慢完善. 项目地址 publishImageAndVideoAn ...

  2. php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  3. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

  4. android滑动菜单图标,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  5. android 底部滑动效果怎么做,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义view配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  6. 【Android视图效果】共享元素实现仿微信查看大图效果

    在之前的文章中,我们通过动画实现了这个,具体可以查看[Android 动画]动画详解之仿微信查看大图效果(四),这里,我们用过度动画来实现. 什么是共享元素? 它是Android 5.0新加入的一种过 ...

  7. IOS仿微信键盘快捷工具栏

    IOS仿微信键盘快捷工具栏 环境 ios15 .Xcode13.0 https://gitee.com/johnson__save_admin/test-amuse-view-controller-o ...

  8. Android 二维码扫描(仿微信界面),根据Google zxing

    Android 二维码扫描(仿微信界面),根据Google zxing Android项目开发中经常会用到二维码扫描,例如登陆.支付等谷歌方面已经有了一个开源库(地址: https://github. ...

  9. Android仿微信头像放大效果

    android仿微信头像放大效果,使用Dialog+Gallery 实现 1.  dialog显示时的动画style,动画可以自己根据喜好自己设置,此处动画xml省略 <style name=& ...

  10. Android 使用 CameraX 快速实现仿微信短视频录制

    Android 使用 CameraX 快速实现仿微信短视频录制(轻触拍照.长按录像) https://github.com/ldlywt/MyCameraX 微信短视频android端 https:/ ...

最新文章

  1. 对于继电器线圈奇怪的H-B曲线的实验测量
  2. 在shell中变量的赋值有五种方法
  3. 初次转化max模型为3D Tiles失败、cesium加载一个obj格式的3D 机房模型
  4. 十、深入Java字符串(下篇)
  5. boost::hana::map_用法的测试程序
  6. [HDU]2098分拆素数和
  7. 爬去哪儿网5A景点评论
  8. Go:获取命令行参数
  9. Go1.17新特性 ,给我们带来了10%的性能提升
  10. 147. Insertion Sort List
  11. opencv cv.waitKey(60) 0xff 含义和作用
  12. 下:比拼生态和未来,Spark和Flink哪家强?
  13. Qt学习之路(一):动态添加/删除控件
  14. 中国传统色彩十六进制颜色码图片大全
  15. coremail服务器无响应,icoremail邮箱系统 邮件收发常见问题|创思Chance
  16. python电影网络爬虫代码_Python爬虫——爬取豆瓣电影Top250代码实例
  17. Windows里面比较好用的在线读书笔记软件
  18. miui7开发版 Android6.0,Android 6.0 MIUI7开发版内测开始推送:
  19. Android仿今日头条图片滑动退出效果
  20. 第一章 android以及智能手机行业相关简介

热门文章

  1. 萌新爬虫系列01——爬取模型网站作品
  2. 云效知识库 Thoughts,企业文档管理工具
  3. 华为 OSPF多区域配置
  4. 开发过程中程序员非常烦恼的问题,3种内存泄漏的解决方案
  5. 环境共享已支持公众号网页登录云开发控制台
  6. android打印机打印网页,如何不调用Android打印预览页面去进行打印?
  7. u盘无法识别如何修复
  8. 【微信小程序】如何获取微信小程序云开发数据库的数据并渲染到页面?
  9. linux中文写作软件,墨者写作Linux版下载
  10. 刚性通道时代——MSTP