我也有微信朋友圈了 Android实现

最近写了一个简单的朋友圈程序,包含了朋友圈的列表实现,视频的录制、预览与上传,图片可选择拍照或者从相册选取,从相册选取可以一次选择多张照片,并且限制照片的张数,想拥有真正属于自己的朋友圈吗?快来围观

本文实例分享了一个简单的朋友圈程序,包含了朋友圈的列表实现,视频的录制、预览与上传,图片可选择拍照,供大家参考,具体内容如下

我也有微信朋友圈了 Android实现

FriendsListActivity 代码如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

public class FriendsListActivity extends BaseActivity implements OnRefreshListener<ListView>, PostListener {

private InteractionAdapter mAdapter;

private PullToRefreshListView mRefreshListView;

private View mFooter;

private Context mContext;

private Button btnToPost;

protected int mPage = 0;

private boolean isRefreshing = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.friends_list);

mContext=getApplicationContext();

mAdapter = new InteractionAdapter(mContext);

mAdapter.setListener(this);

btnToPost=(Button) findViewById(R.id.btn_topost);

mRefreshListView = (PullToRefreshListView) findViewById(R.id.friends_list);

FriendsApi.getFriendsList(mContext, mCallBack);

mRefreshListView.setOnRefreshListener(this);

mFooter = LayoutInflater.from(mContext).inflate(R.layout.loading_footer, null);

// mRefreshListView.getRefreshableView().addFooterView(mFooter);

mRefreshListView.setAdapter(mAdapter);

// mRefreshListView.setOnLastItemVisibleListener(mLastListener);

// mRefreshListView.getRefreshableView().setDividerHeight(40);

btnToPost.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

myPosts();

}

});

}

protected void myPosts() {

new AlertDialog.Builder(this).setItems(new String[]{"图片","视频","文字"}, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent intent=new Intent();

switch (which) {

case 0:

intent.setClass(FriendsListActivity.this, CreatePostActivity.class);

break;

case 1:

intent.setClass(FriendsListActivity.this, RecorderActivity.class);

break;

case 2:

intent.setClass(FriendsListActivity.this, RecorderActivity.class);

break;

default:

break;

}

startActivity(intent);

}

}).show();

}

/**

* 查看更多操作

*/

@Override

public void show(Interaction interaction) {

}

@Override

public void delete(Interaction interaction) {

// TODO Auto-generated method stub

}

@Override

public void onRefresh(PullToRefreshBase<ListView> refreshView) {

if (!isRefreshing) {

isRefreshing = true;

mPage = 0;

FriendsApi.getFriendsList(mContext, mCallBack);

}

}

protected NetCallBack mCallBack = new NetCallBack() {

public void friendslist(ArrayList<Interaction> friends) {

Log.i("friends size>>>>",friends.size()+"————-");

mAdapter.setInteractions(friends);

// mRefreshListView.getLoadingLayoutProxy().setLastUpdatedLabel(null);

mRefreshListView.onRefreshComplete();

isRefreshing = false;

dismissLoading();

};

public void start() {

showLoading();

};

public void failed(String message) {

loadFailed();

};

};

@Override

public void play(Interaction interaction) {

Intent mIntent=new Intent();

mIntent.setClass(FriendsListActivity.this, RecorderPlayActivity.class);

Bundle data = new Bundle();

data.putString("path", interaction.videoPath);

mIntent.putExtras(data);

startActivity(mIntent);

}

}

布局文件 friends_list.xml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/backgroud_color" >

<include

android:id="@+id/list_title"

android:layout_alignParentTop="true"

layout="@layout/list_title"/>

<com.yzl.xyb.friends.refresh.view.PullToRefreshListView

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/friends_list"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_margin="@dimen/padding_left"

android:divider="@android:color/transparent"

android:layout_below="@+id/list_title"

app:ptrOverScroll="false"

app:ptrHeaderTextColor="#ff666666"

app:ptrHeaderTextAppearance="@android:style/TextAppearance.Small"

app:ptrShowIndicator="false"/>

<include layout="@layout/loading"/>

</RelativeLayout>

适配器 InteractionAdapter 对朋友圈列表进行数据填充

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

public class InteractionAdapter extends BaseAdapter implements OnClickListener {

private ArrayList<Interaction> interactions;

private Context mContext;

private FinalBitmap mFinal;

private BitmapDisplayConfig config;

private BitmapDisplayConfig imageConfig;

private PostListener listener;

public InteractionAdapter(Context context) {

mContext = context;

mFinal = FinalBitmap.create(mContext);

Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.user_avatar);

config = new BitmapDisplayConfig();

config.setAnimationType(BitmapDisplayConfig.AnimationType.fadeIn);

config.setLoadfailBitmap(bitmap);

config.setLoadfailBitmap(bitmap);

bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.image_failed);

imageConfig = new BitmapDisplayConfig();

imageConfig.setAnimationType(BitmapDisplayConfig.AnimationType.fadeIn);

imageConfig.setLoadfailBitmap(bitmap);

imageConfig.setLoadfailBitmap(bitmap);

}

public void setListener(PostListener listener) {

this.listener = listener;

}

public void setInteractions(ArrayList<Interaction> interactions) {

this.interactions = interactions;

notifyDataSetChanged();

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return interactions == null ? 0 : interactions.size();

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return interactions.get(position);

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

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

// TODO Auto-generated method stub

ViewHolder holder = null;

if (convertView == null) {

convertView = LayoutInflater.from(mContext).inflate(R.layout.friend_list_item, null);

holder = new ViewHolder();

holder.avatar = (CircleImageView) convertView.findViewById(R.id.avatar);

holder.content = (TextView) convertView.findViewById(R.id.content);

holder.title = (TextView) convertView.findViewById(R.id.title);

holder.subtitle = (TextView) convertView.findViewById(R.id.subtitle);

holder.image = convertView.findViewById(R.id.image_layout);

holder.image0 = (ImageView) convertView.findViewById(R.id.image0);

holder.image1 = (ImageView) convertView.findViewById(R.id.image1);

holder.image2 = (ImageView) convertView.findViewById(R.id.image2);

holder.conments = (TextView) convertView.findViewById(R.id.conment_count);

holder.praises = (TextView) convertView.findViewById(R.id.parise_count);

holder.praised = (ImageView) convertView.findViewById(R.id.praise_icon);

holder.more = (TextView) convertView.findViewById(R.id.more);

holder.viewLayout=(LinearLayout) convertView.findViewById(R.id.view_layout);

holder.surfaceView=(SurfaceView) convertView.findViewById(R.id.surface_view_result);

holder.playButton=(ImageButton) convertView.findViewById(R.id.btn_play_result);

holder.audioLayout=(FrameLayout) convertView.findViewById(R.id.audio_layout);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

Interaction interaction = interactions.get(position);

if (TextUtils.isEmpty(interaction.avatar)) {

holder.avatar.setImageBitmap(config.getLoadfailBitmap());

} else {

mFinal.display(holder.avatar, interaction.avatar, config);

}

holder.title.setText(interaction.name);

holder.subtitle.setText(interaction.subtitle);

holder.content.setText(interaction.content);

holder.conments.setText(String.valueOf(interaction.commentCount));

holder.praises.setText(String.valueOf(interaction.praiseCount));

int images = interaction.images == null ? 0 : interaction.images.size();

if (images > 0) {

holder.image.setVisibility(View.VISIBLE);

holder.audioLayout.setVisibility(View.GONE);

holder.image.setOnClickListener(this);

holder.image.setTag(interaction);

if (images <= 1) {

mFinal.display(holder.image0, interaction.images.get(0), imageConfig);

holder.image1.setImageBitmap(null);

holder.image2.setImageBitmap(null);

} else if (images <= 2) {

mFinal.display(holder.image0, interaction.images.get(0), imageConfig);

mFinal.display(holder.image1, interaction.images.get(1), imageConfig);

holder.image2.setImageBitmap(null);

} else {

mFinal.display(holder.image0, interaction.images.get(0), imageConfig);

mFinal.display(holder.image1, interaction.images.get(1), imageConfig);

mFinal.display(holder.image2, interaction.images.get(2), imageConfig);

}

} else if(interaction.videoPath!=null)

{

holder.image.setVisibility(View.GONE);

holder.playButton.setBackgroundResource(R.drawable.play1pressed);

holder.audioLayout.setVisibility(View.VISIBLE);

holder.playButton.setTag(interaction);

holder.playButton.setOnClickListener(this);

holder.surfaceView.setTag(interaction);

holder.surfaceView.setOnClickListener(this);

}else{

holder.viewLayout.setVisibility(View.GONE);

}

holder.more.setTag(interaction);

holder.more.setOnClickListener(this);

return convertView;

}

private class ViewHolder {

CircleImageView avatar;

TextView title;

TextView subtitle;

TextView content;

View image;

ImageView image0;

ImageView image1;

ImageView image2;

TextView conments;

TextView praises;

ImageView praised;

View delete;

TextView more;

SurfaceView surfaceView;

ImageButton playButton;

FrameLayout audioLayout;

LinearLayout viewLayout;

}

@Override

public void onClick(View v) {

int id = v.getId();

if (id == R.id.btn_play_result) {

Interaction interaction = (Interaction) v.getTag();

}else if (id == R.id.surface_view_result) {

if (this.listener != null) {

this.listener.play((Interaction) v.getTag());

}

}else if (id == R.id.more) {

if (this.listener != null) {

this.listener.show((Interaction) v.getTag());

}

} else if (id == R.id.image_layout) {

Intent intent = new Intent(mContext, MainActivity.class);

Bundle data = new Bundle();

Interaction interaction = (Interaction) v.getTag();

data.putStringArrayList("images", interaction.images);

intent.putExtras(data);

mContext.startActivity(intent);

}

}

public interface PostListener {

void show(Interaction interaction);

void delete(Interaction interaction);

void play(Interaction interaction);

}

我也有微信朋友圈了 Android实现

多图片选择实现代码

MultipleActivity

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

package com.yzl.xyb.friends;

import java.io.File;

import java.io.FilenameFilter;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashSet;

import java.util.List;

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.ContentResolver;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.provider.MediaStore;

import android.util.DisplayMetrics;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

import android.view.WindowManager;

import android.widget.GridView;

import android.widget.PopupWindow.OnDismissListener;

import android.widget.RelativeLayout;

import android.widget.TextView;

import android.widget.Toast;

import com.yzl.xyb.friends.adapter.MyAdapter;

import com.yzl.xyb.friends.adapter.MyAdapter.SetCountListener;

import com.yzl.xyb.friends.picture.ListImageDirPopupWindow;

import com.yzl.xyb.friends.picture.ListImageDirPopupWindow.OnImageDirSelected;

import com.yzl.xyb.friends.util.ImageFloder;

/**

* 从相册选取图片

* 可以选择多张,最多可选9张

* 获取所有相册

* 确定:返回已选图片的路径

* @author hou

*

*/

public class MultipleActivity extends Activity implements OnImageDirSelected, SetCountListener{

private TextView selectCount;

private TextView selectPicture;

private TextView mChooseDir;

private ProgressDialog mProgressDialog;

public static final int KITKAT_LESS = 2;

/**

* 存储文件夹中的图片数量

*/

private int mPicsSize;

/**

* 图片数量最多的文件夹

*/

private File mImgDir;

/**

* 所有的图片

*/

private List<String> mImgs;

private ArrayList<String> pictures;

private GridView mGirdView;

private MyAdapter mAdapter;

/**

* 临时的辅助类,用于防止同一个文件夹的多次扫描

*/

private HashSet<String> mDirPaths = new HashSet<String>();

/**

* 扫描拿到所有的图片文件夹

*/

private List<ImageFloder> mImageFloders = new ArrayList<ImageFloder>();

private RelativeLayout mBottomLy;

int totalCount = 0;

private int mScreenHeight;

private ListImageDirPopupWindow mListImageDirPopupWindow;

private Handler mHandler = new Handler()

{

public void handleMessage(android.os.Message msg)

{

mProgressDialog.dismiss();

// 为View绑定数据

data2View();

// 初始化展示文件夹的popupWindw

initListDirPopupWindw();

}

};

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.picture_selector);

getIntent().getExtras();

DisplayMetrics outMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(outMetrics);

mScreenHeight = outMetrics.heightPixels;

initView();

getImages();

initEvent();

}

/**

* 初始化View

*/

private void initView()

{

mGirdView = (GridView) findViewById(R.id.id_gridView);

mChooseDir = (TextView) findViewById(R.id.id_choose_dir);

selectCount = (TextView) findViewById(R.id.tv_select_count);

// allPhotoAlum = (TextView) findViewById(R.id.tv_photoAlum);

selectPicture= (TextView) findViewById(R.id.tv_sure);

mBottomLy = (RelativeLayout) findViewById(R.id.id_bottom_ly);

}

private void initEvent()

{

/**

* 为底部的布局设置点击事件,弹出popupWindow

*/

mBottomLy.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View v)

{

mListImageDirPopupWindow

.setAnimationStyle(R.style.anim_popup_dir);

mListImageDirPopupWindow.showAsDropDown(mBottomLy, 0, 0);

// 设置背景颜色变暗

WindowManager.LayoutParams lp = getWindow().getAttributes();

lp.alpha = .3f;

getWindow().setAttributes(lp);

}

});

selectPicture.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

pictures=mAdapter.getSelectPath();

Log.i("选中的图片1>>>>>>",pictures.size()+"———-");

Intent intent=new Intent();

// intent.setClass(MultipleActivity.this, CreatePostActivity.class);

Bundle bundle=new Bundle();

bundle.putStringArrayList("PICTURES", pictures);

intent.putExtras(bundle);

// startActivityForResult(intent, KITKAT_LESS);

setResult(KITKAT_LESS, intent);

finish();

}

});

}

/**

* 为View绑定数据

*/

private void data2View()

{

if (mImgDir == null)

{

Toast.makeText(getApplicationContext(), "擦,一张图片没扫描到",

Toast.LENGTH_SHORT).show();

return;

}

mImgs = Arrays.asList(mImgDir.list());

/**

* 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗;

*/

mAdapter = new MyAdapter(getApplicationContext(), mImgs,

R.layout.grid_item, mImgDir.getAbsolutePath());

mAdapter.setCountListener(this);

mGirdView.setAdapter(mAdapter);

// allPictureCount.setText("共"+totalCount + "张");

};

/**

* 初始化展示文件夹的popupWindw

*/

private void initListDirPopupWindw()

{

mListImageDirPopupWindow = new ListImageDirPopupWindow(

LayoutParams.MATCH_PARENT, (int) (mScreenHeight * 1),

mImageFloders, LayoutInflater.from(getApplicationContext())

.inflate(R.layout.list_dir, null));

mListImageDirPopupWindow.setOnDismissListener(new OnDismissListener()

{

@Override

public void onDismiss()

{

// 设置背景颜色变暗

WindowManager.LayoutParams lp = getWindow().getAttributes();

lp.alpha = 1.0f;

getWindow().setAttributes(lp);

}

});

// 设置选择文件夹的回调

mListImageDirPopupWindow.setOnImageDirSelected(this);

}

/**

* 利用ContentProvider扫描手机中的图片,此方法在运行在子线程中 完成图片的扫描,最终获得jpg最多的那个文件夹

*/

private void getImages()

{

if (!Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED))

{

Toast.makeText(this, "暂无外部存储", Toast.LENGTH_SHORT).show();

return;

}

// 显示进度条

mProgressDialog = ProgressDialog.show(this, null, "正在加载…");

new Thread(new Runnable()

{

@Override

public void run()

{

String firstImage = null;

Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

ContentResolver mContentResolver = MultipleActivity.this

.getContentResolver();

// 只查询jpeg和png的图片

Cursor mCursor = mContentResolver.query(mImageUri, null,

MediaStore.Images.Media.MIME_TYPE + "=? or "

+ MediaStore.Images.Media.MIME_TYPE + "=?",

new String[] { "image/jpeg", "image/png" },

MediaStore.Images.Media.DATE_MODIFIED);

Log.e("TAG", mCursor.getCount() + "");

while (mCursor.moveToNext())

{

// 获取图片的路径

String path = mCursor.getString(mCursor

.getColumnIndex(MediaStore.Images.Media.DATA));

Log.e("TAG", path);

// 拿到第一张图片的路径

if (firstImage == null)

firstImage = path;

// 获取该图片的父路径名

File parentFile = new File(path).getParentFile();

if (parentFile == null)

continue;

String dirPath = parentFile.getAbsolutePath();

ImageFloder imageFloder = null;

// 利用一个HashSet防止多次扫描同一个文件夹(不加这个判断,图片多起来还是相当恐怖的~~)

if (mDirPaths.contains(dirPath))

{

continue;

} else

{

mDirPaths.add(dirPath);

// 初始化imageFloder

imageFloder = new ImageFloder();

imageFloder.setDir(dirPath);

imageFloder.setFirstImagePath(path);

}

int picSize = parentFile.list(new FilenameFilter()

{

@Override

public boolean accept(File dir, String filename)

{

if (filename.endsWith(".jpg")

|| filename.endsWith(".png")

|| filename.endsWith(".jpeg"))

return true;

return false;

}

}).length;

totalCount += picSize;

imageFloder.setCount(picSize);

mImageFloders.add(imageFloder);

if (picSize > mPicsSize)

{

mPicsSize = picSize;

mImgDir = parentFile;

}

}

mCursor.close();

// 扫描完成,辅助的HashSet也就可以释放内存了

mDirPaths = null;

// 通知Handler扫描图片完成

mHandler.sendEmptyMessage(0x110);

}

}).start();

}

@Override

public void selected(ImageFloder floder)

{

mImgDir = new File(floder.getDir());

mImgs = Arrays.asList(mImgDir.list(new FilenameFilter()

{

@Override

public boolean accept(File dir, String filename)

{

if (filename.endsWith(".jpg") || filename.endsWith(".png")

|| filename.endsWith(".jpeg"))

return true;

return false;

}

}));

/**

* 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗;

*/

mAdapter = new MyAdapter(getApplicationContext(), mImgs,

R.layout.grid_item, mImgDir.getAbsolutePath());

mAdapter.setCountListener(this);

mGirdView.setAdapter(mAdapter);

// mAdapter.notifyDataSetChanged();

// mImageCount.setText(floder.getCount() + "张");

mChooseDir.setText(floder.getName());

selectCount.setText("/9");

mListImageDirPopupWindow.dismiss();

}

@Override

public void doCount(int a) {

selectCount.setText(a+"/9");

}

}

我也有微信朋友圈了 Android实现

视频的录制与预览

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

package com.yzl.xyb.friends;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.widget.Button;

import android.widget.Toast;

import com.yzl.xyb.friends.view.MovieRecorderView;

import com.yzl.xyb.friends.view.MovieRecorderView.OnRecordFinishListener;

/**

* 录制视频

* @author hou

*

*/

public class RecorderActivity extends Activity {

private MovieRecorderView mRecorderView;

private Button mShootBtn;

private boolean isFinish = true;

private String userId = "";

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.record_activity);

// userId=getIntent().getParcelableExtra("userId");

mRecorderView = (MovieRecorderView) findViewById(R.id.movieRecorderView);

mShootBtn = (Button) findViewById(R.id.shoot_button);

mShootBtn.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

mRecorderView.record(new OnRecordFinishListener() {

@Override

public void onRecordFinish() {

Log.i("MotionEvent>>>","ACTION_DOWN");

handler.sendEmptyMessage(1);

}

});

} else if (event.getAction() == MotionEvent.ACTION_UP) {

Log.i("MotionEvent>>>","ACTION_UP");

if (mRecorderView.getTimeCount() > 1)

handler.sendEmptyMessage(1);

else {

if (mRecorderView.getmVecordFile() != null)

mRecorderView.getmVecordFile().delete();

mRecorderView.stop();

Toast.makeText(RecorderActivity.this, "时间太短,录制失败", Toast.LENGTH_SHORT).show();

}

}

return true;

}

});

}

@Override

public void onResume() {

super.onResume();

isFinish = true;

}

@Override

public void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

isFinish = false;

mRecorderView.stop();

}

@Override

public void onPause() {

super.onPause();

}

@Override

public void onDestroy() {

super.onDestroy();

}

@SuppressLint("HandlerLeak")

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

finishActivity();

Log.i("isFinish>>>",isFinish+"");

}

};

private void finishActivity() {

if (isFinish) {

mRecorderView.stop();

Intent intent = new Intent(RecorderActivity.this, TopicActivity.class);

Bundle mBundle = new Bundle();

mBundle.putString("path", mRecorderView.getmVecordFile().toString());

mBundle.putString("userId", userId);

intent.putExtras(mBundle);

startActivity(intent);

}

}

public interface OnShootCompletionListener {

public void OnShootSuccess(String path, int second);

public void OnShootFailure();

}

}

视频的预览

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

package com.yzl.xyb.friends;

import android.app.Activity;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

import android.widget.ImageView;

public class RecorderPlayActivity extends Activity implements SurfaceHolder.Callback, OnClickListener {

private ImageView ivBack;

private ImageButton btnPlay;

private SurfaceView surfaceView;

private SurfaceHolder surfaceHolder;

private String path=null;

private MediaPlayer player;

private boolean play=false;

@SuppressWarnings("deprecation")

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.recorder_play);

ivBack=(ImageView) findViewById(R.id.iv_back);

btnPlay=(ImageButton) findViewById(R.id.ib_play);

surfaceView=(SurfaceView) findViewById(R.id.play_view);

btnPlay.setBackground(getResources().getDrawable(R.drawable.play1pressed));

path=this.getIntent().getStringExtra("path");

System.out.println("surface created>>>> path= "+path);

surfaceHolder=surfaceView.getHolder();

surfaceHolder.addCallback(this);

surfaceHolder.setFixedSize(320, 220);

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

System.out.println("oncreate————–");

ivBack.setOnClickListener(this);

btnPlay.setOnClickListener(this);

surfaceView.setOnClickListener(this);

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

player=new MediaPlayer();

player.setAudioStreamType(AudioManager.STREAM_MUSIC);

player.setDisplay(surfaceHolder);

try {

System.out.println("surface created>>>> path= "+path);

player.setDataSource(path);

player.prepare();

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// TODO Auto-generated method stub

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.iv_back:

this.finish();

break;

case R.id.ib_play:

player.start();

btnPlay.setVisibility(View.GONE);

break;

case R.id.play_view:

player.pause();

/*if(play){

player.start();

}else {

player.pause();

}*/

btnPlay.setVisibility(View.VISIBLE);

break;

default:

break;

}

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

if(player.isPlaying())

{

player.stop();

}

player.release();

}

}

拥有一个属于自己的朋友圈是不是很开新,可以和好朋友随时随地分享,是不是很开心!

以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/26479/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-09-27 8:26:44
下一篇 2022-09-27 8:26:50

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!