婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 我也有微信朋友圈了 Android實現

我也有微信朋友圈了 Android實現

熱門標簽:南京怎么申請400這種電話 真3地圖標注 濮陽清豐400開頭的電話申請 樂昌電話機器人 地圖標注可以編輯地名嗎 疫情時期電話機器人 南通智能外呼系統怎么樣 臺灣外呼系統軟件 地圖標注跑線下市場

本文實例分享了一個簡單的朋友圈程序,包含了朋友圈的列表實現,視頻的錄制、預覽與上傳,圖片可選擇拍照,供大家參考,具體內容如下

FriendsListActivity  代碼如下

public class FriendsListActivity extends BaseActivity implements OnRefreshListenerListView>, 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(PullToRefreshBaseListView> refreshView) { 
    if (!isRefreshing) {  
      isRefreshing = true;  
      mPage = 0; 
      FriendsApi.getFriendsList(mContext, mCallBack); 
    }  
  } 
 
  protected NetCallBack mCallBack = new NetCallBack() { 
     
    public void friendslist(ArrayListInteraction> 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 ArrayListInteraction> 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(ArrayListInteraction> 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 ListString> mImgs; 
  private ArrayListString> pictures; 
 
  private GridView mGirdView; 
  private MyAdapter mAdapter; 
  /** 
   * 臨時的輔助類,用于防止同一個文件夾的多次掃描 
   */ 
  private HashSetString> mDirPaths = new HashSetString>(); 
 
  /** 
   * 掃描拿到所有的圖片文件夾 
   */ 
  private ListImageFloder> mImageFloders = new ArrayListImageFloder>(); 
 
  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軟件編程有所幫助。

您可能感興趣的文章:
  • java開發微信分享到朋友圈功能
  • Android仿微信發朋友圈瀏覽圖片效果
  • Android GridView仿微信朋友圈顯示圖片
  • 基于js實現微信發送好友如何分享到朋友圈、微博
  • Android實現微信朋友圈發本地視頻功能

標簽:馬鞍山 河北 阿里 福建 南京 陜西 廣安 通遼

巨人網絡通訊聲明:本文標題《我也有微信朋友圈了 Android實現》,本文關鍵詞  我,也有,微信,朋友,圈,了,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《我也有微信朋友圈了 Android實現》相關的同類信息!
  • 本頁收集關于我也有微信朋友圈了 Android實現的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩一二三区视频| 国产福利一区二区三区在线视频| 中文字幕亚洲成人| 秋霞国产午夜精品免费视频| 91在线观看高清| 国产精品不卡一区| 国产美女精品一区二区三区| 欧美肥胖老妇做爰| 亚洲国产日韩a在线播放性色| 国产成人精品影视| 国产精品久久久久久久久果冻传媒| 国内外成人在线视频| 国产香蕉久久精品综合网| 国产成人av一区二区三区在线| 国产suv一区二区三区88区| 欧美一区二区美女| 久久久亚洲午夜电影| 亚洲国产综合人成综合网站| 精品少妇一区二区三区在线视频| 亚洲欧洲成人av每日更新| 亚洲成人免费在线观看| 日韩成人精品视频| 国产一区在线不卡| 男人操女人的视频在线观看欧美| 五月天视频一区| 亚洲激情五月婷婷| 亚洲主播在线观看| 日韩电影免费在线看| 国产亚洲一二三区| 777亚洲妇女| 欧美性受xxxx黑人xyx| 国产一区二区导航在线播放| 91久久一区二区| 国产91精品一区二区麻豆亚洲| 色婷婷av久久久久久久| 久久精品日韩一区二区三区| 日本欧美加勒比视频| 精品久久五月天| 日本精品视频一区二区| 欧美国产一区二区在线观看| 午夜视频在线观看一区二区三区| 丰满白嫩尤物一区二区| 成人免费毛片高清视频| 欧美中文字幕久久| 欧美一级片在线观看| 国产精品久久午夜夜伦鲁鲁| 亚洲精品国产精品乱码不99 | 亚洲欧美日韩人成在线播放| 亚洲女人小视频在线观看| 三级久久三级久久久| 青青草97国产精品免费观看 | 国产99久久久精品| 欧美亚洲日本国产| 成人av免费观看| 国产露脸91国语对白| 亚洲国产成人午夜在线一区| 中文字幕不卡在线观看| 国产一区二区三区四| 欧美高清hd18日本| 亚洲理论在线观看| 激情综合色综合久久综合| 日韩激情视频网站| 国产99精品国产| 国产视频亚洲色图| 日韩高清一区在线| 欧美视频在线观看一区二区| 精品一区二区三区在线观看国产| 不卡的电视剧免费网站有什么| 国产91精品一区二区麻豆网站| 精品剧情v国产在线观看在线| av中文字幕亚洲| 国产ts人妖一区二区| 亚洲自拍偷拍麻豆| 成人免费毛片片v| 欧美一级xxx| 国产精品灌醉下药二区| 97久久超碰国产精品电影| 精品播放一区二区| 成人视屏免费看| 亚洲欧美日韩久久| 粉嫩嫩av羞羞动漫久久久| 亚洲第一成人在线| 777午夜精品视频在线播放| 日韩美女视频一区二区| 国产精品一区二区在线播放| 日韩成人dvd| 国模一区二区三区白浆| 精品福利一区二区三区免费视频| 天天综合色天天| 激情综合色播激情啊| 精品久久久久一区二区国产| 蜜桃视频免费观看一区| 豆国产96在线|亚洲| 亚洲成av人片在线| 一区二区欧美在线观看| av色综合久久天堂av综合| 日韩黄色小视频| 久久综合九色综合97婷婷| 久久99国产精品免费网站| 日韩久久一区二区| 久久久不卡网国产精品二区| 国产精品久久三区| 国产一区二区三区不卡在线观看| 欧美久久一二三四区| 成人欧美一区二区三区视频网页| 国产精品1区二区.| thepron国产精品| 蜜桃在线一区二区三区| 国产精品女人毛片| 中文子幕无线码一区tr| 国产激情一区二区三区四区| 国产亚洲视频系列| 懂色av一区二区夜夜嗨| 日日嗨av一区二区三区四区| 欧美精品一区二区三区四区| 久久综合久久久久88| 国产一区二区中文字幕| 成人免费在线观看入口| 欧美电影免费观看完整版| 国产米奇在线777精品观看| 欧美视频在线一区二区三区| av高清久久久| 在线观看www91| 大陆成人av片| 免费在线看成人av| 精品国产三级电影在线观看| 粉嫩av一区二区三区粉嫩| 国产精品久久久久久久蜜臀 | 日韩欧美在线123| 人妖欧美一区二区| 欧美电影影音先锋| 国产一区二区视频在线播放| 中文字幕一区二区三区在线不卡 | 欧美自拍偷拍午夜视频| 欧美大黄免费观看| 国产在线视视频有精品| 成人性色生活片| 成人免费毛片app| 欧美a级一区二区| 中文字幕亚洲一区二区av在线| 欧美xxxxxxxxx| 国产麻豆精品久久一二三| 精品在线一区二区三区| 亚洲美女免费在线| 亚洲天堂精品视频| 亚洲欧洲av一区二区三区久久| 午夜精品视频在线观看| 久久久亚洲高清| 亚洲成人在线免费| 日韩一区二区三区在线观看 | 久久精品欧美一区二区三区麻豆| 五月激情综合色| 日本高清不卡视频| 一二三区精品视频| 91视频观看视频| 亚洲狼人国产精品| 成人福利视频在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91美女片黄在线观看| 亚洲三级在线免费| 国产成人精品网址| 欧美一级片在线看| 精品综合免费视频观看| 中文字幕av一区 二区| av爱爱亚洲一区| 国产精品―色哟哟| 一本色道综合亚洲| 亚洲国产人成综合网站| 日韩欧美一级二级三级| 免费视频最近日韩| 精品国产免费人成电影在线观看四季| 日本免费新一区视频| 日韩欧美在线综合网| 国产在线精品一区二区夜色| 成人综合婷婷国产精品久久蜜臀| 亚洲欧美一区二区在线观看| 欧美视频一区在线| 天堂精品中文字幕在线| 欧美精品一二三四| 国产综合色产在线精品| 一区二区三区在线高清| 精品乱人伦一区二区三区| 风间由美一区二区三区在线观看 | 日本系列欧美系列| 在线电影一区二区三区| 另类成人小视频在线| 国产午夜精品久久| 欧美午夜影院一区| 国产在线看一区| 亚洲精品午夜久久久| 久久网站热最新地址| 欧美日韩高清影院| 风间由美中文字幕在线看视频国产欧美| 日韩国产欧美三级| 国产欧美日韩精品a在线观看| 欧美在线观看视频在线| 国产91精品精华液一区二区三区| 国产乱码精品一区二区三区忘忧草| 久久精品无码一区二区三区| 欧美日韩你懂得|