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

2023年 4月 19日 53.1k 0

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

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

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

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

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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论