各位用户为了找寻关于我也有微信朋友圈了 Android实现的资料费劲了很多周折。这里教程网为您整理了关于我也有微信朋友圈了 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 180public
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);
}
多图片选择实现代码
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 354package
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"
);
}
}
视频的录制与预览
? 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 112package
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软件编程有所帮助。