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

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

FriendsListActivity 代码

如下

<div class="jb51code">
<pre class="brush:java;">
public class FriendsListActivity extends BaseActivity implements OnRefreshListener,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 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.setIn<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ctions(friends); 

// mRefreshListView.getLoadingLayoutProxy().setLastUpdatedLabel(null);
mRefreshListView.onRefreshComplete();
isRefreshing = false;
dismissLoading();
};

public void start() { 
  showLoading(); 
}; 

public void <a href="https://www.jb51.cc/tag/Failed/" target="_blank" class="keywords">Failed</a>(String message) { 
  load<a href="https://www.jb51.cc/tag/Failed/" target="_blank" class="keywords">Failed</a>(); 
}; 

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

rush:xml;"> <?xml version="1.0" encoding="utf-8"?> <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"/>

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

rush:java;"> public class InteractionAdapter extends BaseAdapter implements OnClickListener { private ArrayList 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_<a href="https://www.jb51.cc/tag/Failed/" target="_blank" class="keywords">Failed</a>); 
imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a> = new Bitmap<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>playCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>(); 
imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>.setAnimationType(Bitmap<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>playCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>.AnimationType.fadeIn); 
imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>.setLoadfailBitmap(bitmap); 
imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>.setLoadfailBitmap(bitmap); 

}

public void setListener(PostListener listener) {
this.listener = listener;
}

public void setInteractions(ArrayList 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();
}

In<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction = in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ctions.get(position); 
if (TextUtils.isEmpty(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.avatar)) { 
  holder.avatar.se<a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>Bitmap(con<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>.getLoadfailBitmap()); 
} else { 
  mFinal.<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>play(holder.avatar,in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.avatar,con<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>); 
} 
holder.title.setText(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.name); 
holder.subtitle.setText(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.subtitle); 
holder.content.setText(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.content); 

holder.conments.setText(String.valueOf(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.commentCount)); 
holder.praises.setText(String.valueOf(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.praiseCount)); 

int images = in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.images == null &#63; 0 : in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.images.size(); 

if (images > 0) { 
  holder.image.setVisibility(View.VISIBLE); 
  holder.au<a href="https://www.jb51.cc/tag/dio/" target="_blank" class="keywords">dio</a>Layout.setVisibility(View.GONE); 
  holder.image.s<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>nClickListener(this); 
  holder.image.setTag(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction); 
  if (images <= 1) { 
    mFinal.<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>play(holder.image0,in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.images.get(0),imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>); 
    holder.image1.se<a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>Bitmap(null); 
    holder.image2.se<a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>Bitmap(null); 
  } else if (images <= 2) { 
    mFinal.<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>play(holder.image0,imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>); 
    mFinal.<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>play(holder.image1,in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.images.get(1),imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>); 
    holder.image2.se<a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>Bitmap(null); 
  } else { 
    mFinal.<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>play(holder.image0,imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>); 
    mFinal.<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>play(holder.image2,in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.images.get(2),imageCon<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>); 

  } 
} else if(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction.videoPath!=null) 
{ 
    holder.image.setVisibility(View.GONE); 
    holder.playButton.setBackgroundResource(R.drawable.play1<a href="https://www.jb51.cc/tag/pressed/" target="_blank" class="keywords">pressed</a>); 
    holder.au<a href="https://www.jb51.cc/tag/dio/" target="_blank" class="keywords">dio</a>Layout.setVisibility(View.VISIBLE); 
    holder.playButton.setTag(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction); 
    holder.playButton.s<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>nClickListener(this); 
    holder.surfaceView.setTag(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction); 
    holder.surfaceView.s<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>nClickListener(this); 
}else{ 
  holder.viewLayout.setVisibility(View.GONE); 
} 

holder.more.setTag(in<a href="https://www.jb51.cc/tag/tera/" target="_blank" class="keywords">tera</a>ction); 
holder.more.s<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>nClickListener(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

rush:java;"> 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 GridView mGirdView;
private MyAdapter mAdapter;
/**

  • 临时的辅助类,用于防止同一个文件夹的多次扫描
    */
    private HashSet mDirPaths = new HashSet();

/**

  • 扫描拿到所有的图片文件
    */
    private List mImageFloders = new ArrayList();

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(); 
ge<a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>s(); 
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);

    // 设置背景颜色变暗
    WindowManager.LayoutParams lp = getwindow().getAttributes();
    lp.alpha = .3f;
    getwindow().setAttributes(lp);
    }
    });

selectPicture.s<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>nClickListener(new OnClickListener() { 

  @Override 
  public void onClick(View v) { 
    pictures=mAdapter.getSelectPath(); 
    Log.i("选中的<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>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()); 
/** 
 * 可以看到<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>夹的路径和<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>的路径分开保存,极大的减少了内存的消耗; 
 */ 
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));
mLis<a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>DirPopupWindow.s<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>n<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>missListener(new On<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>missListener() 
{ 

  @Override 
  public void on<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>miss() 
  { 
    // 设置背景颜色变暗 
    WindowManager.LayoutP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>ms lp = ge<a href="https://www.jb51.cc/tag/twind/" target="_blank" class="keywords">twind</a>ow().getAttributes(); 
    lp.alpha = 1.0f; 
    ge<a href="https://www.jb51.cc/tag/twind/" target="_blank" class="keywords">twind</a>ow().setAttributes(lp); 
  } 
}); 
// 设置选择<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>夹的回调 
mLis<a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>DirPopupWindow.s<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>nImageD<a href="https://www.jb51.cc/tag/irs/" target="_blank" class="keywords">irs</a>elected(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 f<a href="https://www.jb51.cc/tag/irs/" target="_blank" class="keywords">irs</a><a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a> = null; 

    Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
    ContentResolver mContentResolver = MultipleActivity.this 
        .getContentResolver(); 

    // 只<a href="https://www.jb51.cc/tag/chaxun/" target="_blank" class="keywords">查询</a>jpeg和png的<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a> 
    Cursor mCursor = mContentResolver.query(mImageUri,MediaStore.Images.Media.MIME_TYPE + "=&#63; or " 
            + MediaStore.Images.Media.MIME_TYPE + "=&#63;",new String[] { "image/jpeg","image/png" },MediaStore.Images.Media.DATE_MODIFIED); 

    Log.e("TAG",mCursor.getCount() + ""); 
    while (mCursor.mov<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>Next()) 
    { 
      // <a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>的路径 
      String path = mCursor.getString(mCursor 
          .getColumnIndex(MediaStore.Images.Media.DATA)); 

      Log.e("TAG",path); 
      // 拿到<a href="https://www.jb51.cc/tag/diyizhangtupian/" target="_blank" class="keywords">第一张图片</a>的路径 
      if (f<a href="https://www.jb51.cc/tag/irs/" target="_blank" class="keywords">irs</a><a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a> == null) 
        f<a href="https://www.jb51.cc/tag/irs/" target="_blank" class="keywords">irs</a><a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a> = path; 
      // <a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>该<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>的父路径名 
      File parentFile = new File(path).getParentFile(); 
      if (parentFile == null) 
        continue; 
      String dirPath = parentFile.getAbsolutePath(); 
      ImageFloder imageFloder = null; 
      // 利用<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>HashSet防止多次扫描同<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a><a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>夹(不加这个判断,<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>多起来还是相当恐怖的~~) 
      if (mDirPaths.contains(dirPath)) 
      { 
        continue; 
      } else 
      { 
        mDirPaths.add(dirPath); 
        // 初始化imageFloder 
        imageFloder = new ImageFloder(); 
        imageFloder.setDir(dirPath); 
        imageFloder.setF<a href="https://www.jb51.cc/tag/irs/" target="_blank" class="keywords">irs</a><a href="https://www.jb51.cc/tag/timage/" target="_blank" class="keywords">timage</a>Path(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; 

    // <a href="https://www.jb51.cc/tag/tongzhi/" target="_blank" class="keywords">通知</a>Handler扫描<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>完成 
    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; 
  } 
})); 
/** 
 * 可以看到<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>夹的路径和<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>的路径分开保存,极大的减少了内存的消耗; 
 */ 
mAdapter = new MyAdapter(getApplicationContext(),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");
}

}


视频的录制与预览

<div class="jb51code">
<pre class="brush:java;">
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();
}
}

视频的预览

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...