package com.lan.nicehair.activity; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Intent; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.view.ViewPager; import android.text.Html; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.RelativeLayout; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; import com.lan.nicehair.R; import com.lan.nicehair.common.HorizontalListView; import com.lan.nicehair.common.MultiTouchImageView; import com.lan.nicehair.utils.AppLog; import com.lan.nicehair.utils.AppToast; import com.lan.nicehair.utils.ImageUtil; import com.lan.nicehair.utils.LPhone; import com.lan.nicehair.widget.ModelPopup; import com.lan.nicehair.widget.TopBarView; import com.lan.nicehair.widget.ModelPopup.OnDialogListener; /** * 换发型 * @author lanyj * */ public class ChangeHairActivity extends BaseActivity implements OnDialogListener { @InjectView(R.id.topbar) TopBarView mTopBar; @InjectView(R.id.hairIv) MultiTouchImageView mHairIv; @InjectView(R.id.listview) HorizontalListView mListView; @InjectView(R.id.slideMenu) ViewPager slideMenu; @InjectView(R.id.modelIv) ImageView mModeIv; @InjectView(R.id.model_radioGroup) RadioGroup mRadioGroup; @InjectView(R.id.responsetouchContainer) RelativeLayout layout_root; @OnClick(R.id.takephotoIv) public void onTakePhotoClicked(View v) { mPopup.showAtLocation(layout_root, Gravity.BOTTOM, 0, 0); } @OnClick(R.id.shake_imageIv) public void onShakeClicked(View v) { } @OnClick(R.id.one_key_changeIv) public void onOneChangeClicked(View v) { } @OnClick(R.id.open_more_screen) public void onOpenMoreClicked(View v) { } /*** * 使用照相机拍照获取图片 */ public static final int SELECT_PIC_BY_TACK_PHOTO = 1; /*** * 使用相册中的图片 */ public static final int SELECT_PIC_BY_PICK_PHOTO = 2; private Hairs mHairs; private AssetManager assetManager; private ImageAdapter adapter; private boolean isMale; private String mRightText; private ModelPopup mPopup; private int selectPos=0; //设定的是dp值,为适应多分辨率手机 private float mDpWidth=140f; private float mDpHeight=140f; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.changehair_activity_layout); ButterKnife.inject(this); mTopBar.setActivity(this); mTopBar.setTitle("换发型"); mRightText="<font color='white'><big>女/</big></font><font color='#808080'>男</font>"; mTopBar.mTvRight.setText(Html.fromHtml(mRightText)); mHairs=new Hairs(); loadAssetsRes(); mPopup = new ModelPopup(this,this,true); adapter=new ImageAdapter(mHairs.female_show); mListView.setAdapter(adapter); String fileName=mHairs.female_try.get(0); showZoomImage(fileName); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub List<String> listInfo; selectPos=position; if(mRadioGroup.getCheckedRadioButtonId()==R.id.radio_fmale) { listInfo=mHairs.female_try; }else { listInfo=mHairs.male_try; } if(position>listInfo.size()-1)return; String fileName=listInfo.get(position); showZoomImage(fileName); adapter.notifyDataSetChanged(); } }); mTopBar.mTvRight.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(!isMale) { isMale=true; mModeIv.setImageResource(R.drawable.modelsecond); mRightText="<font color='white'><big>男/</big></font><font color='#808080'>女</font>"; }else { isMale=false; mModeIv.setImageResource(R.drawable.modelfourth); mRightText="<font color='white'><big>女/</big></font><font color='#808080'>男</font>"; } mTopBar.mTvRight.setText(Html.fromHtml(mRightText)); } }); mRadioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch(checkedId) { case R.id.radio_fmale: adapter.mListInfo=mHairs.female_show; adapter.notifyDataSetChanged(); break; case R.id.radio_male: adapter.mListInfo=mHairs.male_show; adapter.notifyDataSetChanged(); break; } } }); } private void showZoomImage(String fileName) { Bitmap bm=getResBitmap(fileName); int w=LPhone.dp2px(ChangeHairActivity.this, mDpWidth); int h=LPhone.dp2px(ChangeHairActivity.this, mDpHeight); if(bm!=null) { Bitmap b=ImageUtil.resizeBitmap(w, h, bm); mHairIv.setImageBitmap(b); } } private void loadAssetsRes() { assetManager = getAssets(); try { //hairs目录 String[] files = assetManager.list("hairs"); for(int i=0;i<files.length;i++) { String fileName="hairs/"+files[i]; if(files[i].startsWith("female_show")) mHairs.female_show.add(fileName); else if(files[i].startsWith("female_try")) mHairs.female_try.add(fileName); else if(files[i].startsWith("male_show")) mHairs.male_show.add(fileName); else if(files[i].startsWith("male_try")) mHairs.male_try.add(fileName); } //hairshake目录 files = assetManager.list("hairshake"); for(int i=0;i<files.length;i++) { mHairs.hairshake.add("hairshake/"+files[i]); } //hairshake_male目录 files = assetManager.list("hairshake_male"); for(int i=0;i<files.length;i++) { mHairs.hairshake_male.add("hairshake_male/"+files[i]); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); AppLog.e("loadAssetsRes Fail", e.getMessage()); } } public class Hairs{ public List<String> female_show=new ArrayList<String>(); public List<String> female_try=new ArrayList<String>(); public List<String> male_show=new ArrayList<String>(); public List<String> male_try=new ArrayList<String>(); public List<String> hairshake=new ArrayList<String>(); public List<String> hairshake_male=new ArrayList<String>(); } private class ImageAdapter extends BaseAdapter{ private List<String> mListInfo; public ImageAdapter(List<String> mListInfo) { this.mListInfo=mListInfo; } @Override public int getCount() { // TODO Auto-generated method stub return mListInfo==null?0:mListInfo.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mListInfo.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) { holder=new ViewHolder(); convertView=getLayoutInflater().inflate(R.layout.item_image, null); holder.imageView=(ImageView)convertView.findViewById(R.id.iv_item_hair); convertView.setTag(holder); }else { holder=(ViewHolder) convertView.getTag(); } String fileName=mListInfo.get(position); Bitmap bm=getResBitmap(fileName); holder.imageView.setImageBitmap(ImageUtil.getRoundedCornerBitmap(bm, 20)); if(selectPos==position) { holder.imageView.setBackgroundResource(R.drawable.hairview_pressed); }else { holder.imageView.setBackgroundResource(R.drawable.transparent); } return convertView; } public class ViewHolder{ private ImageView imageView; } } private Bitmap getResBitmap(String fileName) { InputStream ims; try { ims = assetManager.open(fileName); return BitmapFactory.decodeStream(ims); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == RESULT_OK) { switch (requestCode) { case SELECT_PIC_BY_TACK_PHOTO: //选择自拍结果 String picPath=intent.getStringExtra("path"); Bitmap bitmap=ImageUtil.getLocalThumbImg(picPath, 320, 640,"jpg"); if(bitmap!=null) mModeIv.setImageBitmap(bitmap); break; case SELECT_PIC_BY_PICK_PHOTO: //选择图库图片结果 picPath = ImageUtil.getPicPathFromUri(intent.getData(), this); bitmap=ImageUtil.getLocalThumbImg(picPath, 320, 640,"jpg"); if(bitmap!=null) mModeIv.setImageBitmap(bitmap); break; } } } @Override public void onChoosePhoto() { // TODO Auto-generated method stub //从相册中取图片 Intent choosePictureIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(choosePictureIntent, SELECT_PIC_BY_PICK_PHOTO); } @Override public void onTakePhoto() { // TODO Auto-generated method stub //takePhoto(); Intent intent=new Intent(ChangeHairActivity.this,CameraActivity.class); startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); } @Override public void onModel() { // TODO Auto-generated method stub } @Override public void onCancel() { // TODO Auto-generated method stub } }