标签:
先上效果:
上效果
现在直接贴代码,这个demo代码很少,2个activity之间的回调跳转时必须的,图中的小图标怎么找了,这个是最直接的功能,希望能帮助到和我一样的小白:
property_repair.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" tools:ignore="MergeRootFrame" > <Button android:id="@+id/button1" android:layout_width="100dp" android:layout_height="30dp" android:text="提交问题" android:gravity="center" android:textColor="#1Eb2ff" android:background="@null" android:textSize="16sp" android:layout_alignParentRight="true" /> <RelativeLayout android:id="@+id/Content_Layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/button1" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ffffff" android:layout_alignParentBottom="true" > <EditText android:id="@+id/editText1" android:layout_height="120dp" android:layout_width="fill_parent" android:textColor="#1eb2ff" android:gravity="top" android:textSize="15sp" android:hint="请说明你的问题..." android:maxLength="500" android:singleLine="false" android:background="#ffffff" /> <GridView android:id="@+id/Scrollgridview" android:layout_width="fill_parent" android:layout_height="180dp" android:layout_marginLeft="28dp" android:columnWidth="90dp" android:gravity="center" android:background="#ffffff" android:horizontalSpacing="5dp" android:listSelector="@android:color/transparent" android:numColumns="3" android:scrollbars="none" android:stretchMode="columnWidth" android:verticalSpacing="10dp" /> </LinearLayout> </RelativeLayout> </RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linear_layout_fanhui" android:layout_width="match_parent" android:layout_marginTop="20dp" android:layout_height="23dp" > <Button android:id="@+id/fanhui" android:layout_width="20dp" android:layout_marginLeft="30dp" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:background="@drawable/back" android:paddingLeft="5dp" android:textSize="15sp" /> </LinearLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="500dp" > </android.support.v4.view.ViewPager> <Button android:id="@+id/deldete" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:background="@drawable/delet" /> </LinearLayout>
activity_selectimg.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical" > <HorizontalScrollView android:id="@+id/selectimg_horizontalScrollView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="10dp" android:paddingRight="10dp" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <GridView android:id="@+id/noScrollgridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fastScrollEnabled="true" android:focusable="true" android:gravity="center" android:horizontalSpacing="0dp" android:scrollbars="none" android:scrollingCache="false" android:stretchMode="spacingWidthUniform" android:verticalSpacing="1dp" > </GridView> </LinearLayout> </HorizontalScrollView> </LinearLayout>item_popupwindows.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" > <LinearLayout android:id="@+id/ll_popup" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#ffffff" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="1dp" android:background="#ff495a" /> <LinearLayout android:layout_width="match_parent" android:layout_height="55dp" android:orientation="horizontal" > <Button android:id="@+id/item_popupwindows_camera" android:layout_width="match_parent" android:layout_height="55dp" android:background="@drawable/bt_nobgd_top_button_left_right_11" android:text="拍照" android:textColor="#585858" android:textSize="18sp" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="1px" android:layout_marginLeft="80dp" android:background="#f2f2f2" /> <LinearLayout android:layout_width="match_parent" android:layout_height="55dp" android:orientation="horizontal" > <Button android:id="@+id/item_popupwindows_Photo" android:layout_width="match_parent" android:layout_height="55dp" android:background="@drawable/bt_nobgd_top_button_left_right_11" android:text="从相册中选取" android:textColor="#585858" android:textSize="18sp" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="2dp" android:background="#f3f3f3" /> <Button android:id="@+id/item_popupwindows_cancel" android:layout_width="match_parent" android:layout_height="55dp" android:background="@drawable/bt_nobgd_top_button_left_right_11" android:text="取消" android:textColor="#585858" android:textSize="18sp" /> </LinearLayout> </RelativeLayout>
<?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" > <ImageView android:id="@+id/item_grida_image" android:layout_width="80dp" android:layout_height="80dp" android:scaleType="fitXY" /> </RelativeLayout>当然权限是少不了的:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
PhotoActivity.java
package com.dynamic; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.ImageView; public class PhotoActivity extends Activity { public List<Bitmap> bitmap = new ArrayList<Bitmap>(); private ArrayList<View> listViews ; private ViewPager pager; private MyPageAdapter adapter; private Button fanhui; private Button deldete; private int index = 0; private MainActivity property_repair; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_photo); deldete=(Button) findViewById(R.id. deldete); /** * 删除照片 */ deldete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (listViews.size() > 0) { listViews.remove(index); MainActivity.bmp.remove(index); adapter.notifyDataSetChanged(); } } }); fanhui=(Button) findViewById(R.id.fanhui); fanhui.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); pager = (ViewPager) findViewById(R.id.viewpager); pager.setOnPageChangeListener(pageChangeListener); for (int i = 0; i < property_repair.bmp.size(); i++) { initListViews(property_repair.bmp.get(i)); } adapter = new MyPageAdapter(listViews);// 构造adapter pager.setAdapter(adapter); //设置适配器 Intent intent = getIntent(); int id = intent.getIntExtra("ID", 0); pager.setCurrentItem(id); } private void initListViews(Bitmap bm) { if (listViews == null) listViews = new ArrayList<View>(); final ImageView img = new ImageView(this);// 构造textView对象 img.setImageBitmap(bm); img.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); // 添加view listViews.add(img); } private OnPageChangeListener pageChangeListener = new OnPageChangeListener() { public void onPageSelected(int arg0) { // 页面选择响应函数 index = arg0; } public void onPageScrolled(int arg0, float arg1, int arg2) {// 滑动中。。。 } public void onPageScrollStateChanged(int arg0) {// 滑动状态改变 } }; class MyPageAdapter extends PagerAdapter { private ArrayList<View> listViews;// content private int size;// 页数 public MyPageAdapter(ArrayList<View> listViews) {// 构造函数 // 初始化viewpager的时候给的一个页面 this.listViews = listViews; size = listViews == null ? 0 : listViews.size(); } public void setListViews(ArrayList<View> listViews) {// 自己写的一个方法用来添加数据 this.listViews = listViews; size = listViews == null ? 0 : listViews.size(); } public int getCount() {// 返回数量 if (listViews != null && listViews.size() > 0) { return listViews.size(); } else { return 0; } } public int getItemPosition(Object object) { return POSITION_NONE; } public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); if(listViews.size()==0){ finish(); } } public void finishUpdate(View arg0) { } public Object instantiateItem(ViewGroup container, int position) { container.addView(listViews.get(position)); return listViews.get(position); } public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } } }
package com.dynamic; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.WindowManager.LayoutParams; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.Toast; public class MainActivity extends Activity implements OnItemClickListener { private GridView gridview; private GridAdapter adapter; private float dp; public static List<Bitmap> bmp = new ArrayList<Bitmap>(); public static List<String> drr = new ArrayList<String>(); private LinearLayout ll_popup ; private Button button1;// 发布按钮 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.property_repair); Init(); final EditText editText1 = (EditText) findViewById(R.id.editText1); button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (editText1.getText().toString().length() == 0) { Toast.makeText(MainActivity.this, "请简述详情", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "提交成功",Toast.LENGTH_SHORT).show(); finish(); } } }); } List<String> urList = new ArrayList<String>(); public void Init() { dp = getResources().getDimension(R.dimen.dp); gridview = (GridView) findViewById(R.id.Scrollgridview); gridviewInit(); } public void gridviewInit() { adapter = new GridAdapter(this,bmp); adapter.setSelectedPosition(0); gridview.setAdapter(adapter); adapter.notifyDataSetChanged(); gridview.setOnItemClickListener(this); } protected void onPause() { super.onPause(); } private class GridAdapter extends BaseAdapter { private LayoutInflater listContainer; private int selectedPosition = -1; private List<Bitmap> bmps=new ArrayList<Bitmap>(); private class ViewHolder { public ImageView image; } private GridAdapter(Context context, List<Bitmap> bmp) { listContainer = LayoutInflater.from(context); bmps=bmp; } public int getCount() { return bmps.size() + 1; } public Object getItem(int arg0) { return null; } public long getItemId(int arg0) { return 0; } public void setSelectedPosition(int position) { selectedPosition = position; } public int getSelectedPosition() { return selectedPosition; } public View getView(int position, View convertView, ViewGroup parent) { final int sign = position; ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = listContainer.inflate( R.layout.item_published_grida, null); holder.image = (ImageView) convertView .findViewById(R.id.item_grida_image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (position == bmps.size()) { holder.image.setImageBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.icon_addpic_unfocused)); if (position == 6) { holder.image.setVisibility(View.GONE); } } else { holder.image.setImageBitmap(bmps.get(position)); } return convertView; } } private class PopupWindows extends PopupWindow { private PopupWindows(Context mContext, View parent) { View view = View.inflate(mContext, R.layout.item_popupwindows, null); ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup); setWidth(LayoutParams.FILL_PARENT); setHeight(LayoutParams.FILL_PARENT); setFocusable(true); setOutsideTouchable(true); setContentView(view); showAtLocation(parent, Gravity.BOTTOM, 0, 0); update(); Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera); Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo); Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel); bt1.setOnClickListener(new OnClickListener() { public void onClick(View v) { photo(); dismiss(); } }); bt2.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_LOAD_IMAGE); dismiss(); } }); bt3.setOnClickListener(new OnClickListener() { public void onClick(View v) { dismiss(); } }); } } private static final int TAKE_PICTURE = 0; private static final int RESULT_LOAD_IMAGE = 1; private static final int UI=2; private String path = ""; private Uri mOutPutFileUri; String picturePath; private void photo() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //文件夹aaaa String path = Environment.getExternalStorageDirectory().toString()+"/elife/img"; File path1 = new File(path); if(!path1.exists()){ path1.mkdirs(); } File file = new File(path1,System.currentTimeMillis()+".jpg"); mOutPutFileUri = Uri.fromFile(file); picturePath=file.getAbsolutePath(); intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutPutFileUri); startActivityForResult(intent, TAKE_PICTURE); } private void photoview() { Intent pc=new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(pc, RESULT_LOAD_IMAGE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { // 拍照 case TAKE_PICTURE: if (resultCode==RESULT_OK) { startPhotoZoom(picturePath); } break; // 相册 case RESULT_LOAD_IMAGE: if (resultCode==RESULT_OK) { Uri uri=data.getData(); String[] files={MediaStore.Images.Media.DATA}; Cursor c=this.getContentResolver().query(uri, files, null, null, null); c.moveToFirst(); int ii=c.getColumnIndex(files[0]); path=c.getString(ii); c.close(); startPhotoZoom(path); } break; } } private Bitmap getLoacalBitmap(String url) { try { FileInputStream fis = new FileInputStream(url); return BitmapFactory.decodeStream(fis); // /把流转化为Bitmap图片 } catch (FileNotFoundException e) { e.printStackTrace(); return null; } } private Bitmap createFramedPhoto(int x, int y, Bitmap image, float outerRadiusRat) { Drawable imageDrawable = new BitmapDrawable(image); Bitmap output = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); RectF outerRect = new RectF(0, 0, x, y); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.RED); canvas.drawRoundRect(outerRect, outerRadiusRat, outerRadiusRat, paint); // paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); imageDrawable.setBounds(0, 0, x, y); canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG); imageDrawable.draw(canvas); canvas.restore(); return output; } private void startPhotoZoom(String uri) { drr.add(uri); Bitmap bitmap =getLoacalBitmap(drr.get(drr.size()-1 )); bmp.add(bitmap); gridviewInit(); } protected void onDestroy() { bmp.clear(); drr.clear(); super.onDestroy(); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)). hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); if (arg2 == bmp.size()) { String sdcardState = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(sdcardState)) { if(bmp.size()<5){ new PopupWindows(MainActivity.this, gridview); } else{ Toast.makeText(getApplicationContext(), "一次只能传5张", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(getApplicationContext(), "sdcard已拔出,不能选择照片", Toast.LENGTH_SHORT).show(); } } else { Intent intent = new Intent(MainActivity.this,PhotoActivity.class); intent.putExtra("ID", arg2); startActivity(intent); } } @Override protected void onResume() { adapter.notifyDataSetChanged(); super.onResume(); } }好了 以上是整个项目的程序 大家拷贝下来就可以运行了,祝各位程序小白更上一层楼
Android模仿发说说 完美版 无bug 可以本地获取相机,相册 删除,点击进入滑动 ui更新
标签:
原文地址:http://blog.csdn.net/qq_32521313/article/details/51111852