我也有微信朋友圈了 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); 
  } 

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

多图片选择实现代码

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

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

视频的录制与预览

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

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

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

原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/235127.html

(0)
上一篇 2022年1月23日
下一篇 2022年1月23日

相关推荐

发表回复

登录后才能评论