各位用户为了找寻关于我也有微信朋友圈了 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 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);   }

多图片选择实现代码

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

视频的录制与预览

 

? 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软件编程有所帮助。