当前位置:首页 > Android自定义View 简单实现多图片选择控件
@Override
public void onClick(View v) { int i = v.getId();
if (i == R.id.btn_del) {//删除按钮点击
mAdapter.remove(mViewPager.getCurrentItem());//
mTitleCount.setText(mViewPager.getCurrentItem()+1+\ if (mImageList.size()==0){ Intent intent = new Intent();
intent.putExtra(\ setResult(RESULT_OK,intent); finish(); }
}else if (i==R.id.btn_backpress){//返回 Intent intent = new Intent();
intent.putExtra(\ setResult(RESULT_OK,intent); finish(); } }
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode==KeyEvent.KEYCODE_BACK){ Intent intent = nwww.sm136.comew Intent(); intent.putExtra(\ setResult(RESULT_OK,intent); finish(); return true; }
return super.onKeyDown(keyCode, event); }
class TouchImageAdapter extends FragmentStatePagerAdapter { public TouchImageAdapter(FragmentManager fm) { super(fm); }
@Override
public int getCount() { return mImageList.size(); }
public void remove(int position){
mImageList.remove(position); notifyDataSetChanged(); }
@Override
public int getItemPosition(Object object) { return POSITION_NONE; }
@Override
public Fragment getItem(int position) {
SinglePreviewFragment fragment = new SinglePreviewFragment(); Bundle bundle = new Bunnc630.comdle();
bundle.putSerializable(SinglePreviewFragment.KEY_URL, mImageList.get(position)); fragment.setArguments(bundle); return fragment; } }
@SuppressLint(\
private class SinglePreviewFragment extends Fragment { public static final String KEY_URL = \ private PhotoDraweeView photoDraweeView; private String url;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments();
url = (String) bundle.getSerializable(KEY_URL); Log.i(TAG, \
photoDraweeView = new PhotoDraweeView(getActivity()); photoDraweeView.setBackgroundColor(0xff000000); ViewGroup.LayoutParams RENT);
photoDraweeView.setLayoutParams(params);
photoDraweeView.setOnPhotoTapListener(new OnPhotoTapListener() { @Override
public void onPhotoTap(View view, float x, float y) {
params
=
new
ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PA
getActivity().finish(); } });
if (!url.startsWith(\ url = \ }
ImageRequestBuilder requestBuilder = ImageRequestBuilder.newBuilderWithSource( Uri.parse(url))
.setResizeOptions(new ResizeOptions(768,1280)) .setAutoRotateEnabled(true);
PipelineDraweeControllerBuilder controller = Fresco.newDraweeControllerBuilder(); controller.setOldController(photoDraweeView.getController()); controller.setImageRequest(requestBuilder.build());
controller.setControllerListener(new BaseControllerListener
public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) { super.onFinalImageSet(id, imageInfo, animatable); if (imageInfo == null) { return; }
photoDraweeView.update(imageInfo.getWidth(), imageInfo.getHeight()); } });
photoDraweeView.setController(controller.build()); }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return photoDraweeView; } } }
相信大家都能看懂上面代码,用ViewPager对图片进行加载,在点击回退和删除完图片的时候把ImageList传回去。
这样在onActivityResult中获取到imageList,刷新adapter,gridview就重新渲染了。 使用
1、布局中引入ImagePickerView
android:paddingBottom=\ android:paddingLeft=\ android:paddingRight=\ android:paddingTop=\ android:orientation=\ tools:context=\
2、在Activity中获得ImagePickerView,并且在onActivityResult方法中调用ImagePickerView数据刷新方法 imagePicker.onActivityResult(requestCode,resultCode,data);
3、获取选择图片的路径
调用imagePicker.getImageList()即返回图片选择的List
下面是一段代码示例
public class MainActivity extends AppCompatActivity {
private ImagePickerView imagePicker;
private Button commitBtn;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fresco.initialize(this);
imagePicker = (ImagePickerView) findViewById(R.id.imagePicker); commitBtn = (Button) findViewById(R.id.commit_btn); commitBtn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
for (int i=0;i imagePicker.setNoImgResource(R.layout.add_img);//自定义imagePicker add item样式 imagePicker.setColumnNumber(5);//设置显示5列 } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { imagePicker.onActivityResult(requestCode,resultCode,data); } } 结语 看了ImagePickerView的实现,是不是发现一个自定义控件其实也很简单。在我们做自定义控件的时候,其实大部分情况只是在Android系统提供的功能上多加一点我们的需求而已。站在巨人的肩膀上,才可以看的更远嘛。
共分享92篇相关文档