娇娱网
您的当前位置:首页我也有微信朋友圈了Android实现

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

来源:娇娱网


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

FriendsListActivity  代码如下

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

<?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 对朋友圈列表进行数据填充

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); 
 } 

          

多图片选择实现代码

MultipleActivity

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"); 
 } 
 
 
} 

                  

视频的录制与预览

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(); 
 } 
} 

视频的预览

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(); 
 } 
} 

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

显示全文