//大家应该看过腾讯新闻的图片新闻的效果,点一张图,进入一个active.这个页图片能左右滑动,双手指放大,同时能显示当前你看的是第几张图.以下为实现代码.
package 你的包名 import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.PointF; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.FloatMath; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class ShowImgActivity extends Activity { private static final String LOG_TAG = "ShowImgActivity"; private Toast tips; //滑屏使用 private ViewPager myViewPager; private MyPagerAdapter myAdapter; private LayoutInflater mInflater; private List<View> mListViews; private View layout1 = null; private View layout2 = null; private View layout3 = null; private View layout4 = null; private View layout5 = null; private TextView topTip; private TextView Close; private Integer PicNum = 0; private Integer NowPic=0; private String Pic1=""; private String Pic2=""; private String Pic3=""; private String Pic4=""; private String Pic5=""; private ImageView NewsImg1; private ImageView NewsImg2; private ImageView NewsImg3; private ImageView NewsImg4; private ImageView NewsImg5; private byte[] BImg1=null; private byte[] BImg2=null; private byte[] BImg3=null; private byte[] BImg4=null; private byte[] BImg5=null; private final static String ALBUM_PATH = Environment.getExternalStorageDirectory() + "/"; //放大缩小使用 private static final int NONE = 0; private static final int DRAG = 1; private static final int ZOOM = 2; private int mode = NONE; private float oldDist; private Matrix matrix = new Matrix(); private Matrix savedMatrix = new Matrix(); private PointF start = new PointF(); private PointF mid = new PointF(); private String dhcode = ""; private String domailurl = ""; ///////// @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); //隐藏标题 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏提示信息 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); getWindow().setWindowAnimations(1);//去除页面载入动画(左移动) setContentView(R.layout.show_img_activity); Log.i("3333","3333"); topTip=(TextView)findViewById(R.id.toptip); Close=(TextView)findViewById(R.id.close); Close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub finish(); } }); //获取传来的信息 dhcode=this.getIntent().getStringExtra("dhbm"); domailurl=this.getIntent().getStringExtra("domailurl"); PicNum = Integer.valueOf(this.getIntent().getStringExtra("picnum")); NowPic=Integer.valueOf(this.getIntent().getStringExtra("nowpic")); Pic1=this.getIntent().getStringExtra("pic1"); Pic2=this.getIntent().getStringExtra("pic2"); Pic3=this.getIntent().getStringExtra("pic3"); Pic4=this.getIntent().getStringExtra("pic4"); Pic5=this.getIntent().getStringExtra("pic5"); Log.i("Pic1",Pic1.toString()); Log.i("Pic2",Pic2.toString()); //////////// myAdapter = new MyPagerAdapter(); myViewPager = (ViewPager) findViewById(R.id.viewpagerLayout); myViewPager.setAdapter(myAdapter); mListViews = new ArrayList<View>(); mInflater = getLayoutInflater(); layout1 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout2 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout3 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout4 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout5 = mInflater.inflate(R.layout.show_img_draw_activity, null); if(PicNum>=1){mListViews.add(layout1);} if(PicNum>=2){mListViews.add(layout2);} if(PicNum>=3){mListViews.add(layout3);} if(PicNum>=4){mListViews.add(layout4);} if(PicNum>=5){mListViews.add(layout5);} NewsImg1=(ImageView)layout1.findViewById(R.id.bigimg); NewsImg2=(ImageView)layout2.findViewById(R.id.bigimg); NewsImg3=(ImageView)layout3.findViewById(R.id.bigimg); NewsImg4=(ImageView)layout4.findViewById(R.id.bigimg); NewsImg5=(ImageView)layout5.findViewById(R.id.bigimg); Log.i("start1","========="); ////////////////滑屏使用///////// // 初始化当前显示的view myViewPager.setCurrentItem(NowPic-1); topTip.setText(NowPic+"/"+PicNum); myViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { // activity从1到2滑动,2被加载后掉用此方法 //View v = mListViews.get(arg0); //Log.i(LOG_TAG, String.valueOf(arg0)); switch(arg0){ case(0): topTip.setText("1/"+PicNum); /*NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(1): topTip.setText("2/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(2): topTip.setText("3/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(3): topTip.setText("4/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(4): topTip.setText("5/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; default: break; } NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // 从1到2滑动,在1滑动前调用 Log.i(LOG_TAG, "uu"+String.valueOf(arg0)); } @Override public void onPageScrollStateChanged(int arg0) { } }); Log.i("tiptops","========="); ///////////// //显示大图片1 if(Pic1.equals("")){ NewsImg1.setImageResource(R.drawable.nopic); } else { //填充本地图片 Bitmap bm1=null; try { Log.i("go try 1","==========="); Log.i("album_path",ALBUM_PATH+Pic1); Log.i("dhcode",dhcode); Log.i("===imgpath====",ALBUM_PATH+Pic1.replace("/newsimg", "newsdetail").replace(dhcode, "")); bm1=BitmapFactory.decodeFile(ALBUM_PATH+Pic1.replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg1.setImageBitmap(bm1); } //显示大图片2 if(Pic2.equals("")){ NewsImg2.setImageResource(R.drawable.nopic); } else { //填充本地图片 Bitmap bm2=null; try { bm2=BitmapFactory.decodeFile(ALBUM_PATH+Pic2.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm2=BitmapFactory.decodeFile(ALBUM_PATH+Pic2.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg2.setImageBitmap(bm2); } //显示大图片3 if(Pic3.equals("")){ NewsImg3.setImageResource(R.drawable.nopic); } else { //填充本地图片 Bitmap bm3=null; try { bm3=BitmapFactory.decodeFile(ALBUM_PATH+Pic3.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm3=BitmapFactory.decodeFile(ALBUM_PATH+Pic3.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg3.setImageBitmap(bm3); } //显示大图片4 if(Pic4.equals("")){ NewsImg4.setImageResource(R.drawable.nopic); } else { //填充本地图片 Bitmap bm4=null; try { bm4=BitmapFactory.decodeFile(ALBUM_PATH+Pic4.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm4=BitmapFactory.decodeFile(ALBUM_PATH+Pic4.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg4.setImageBitmap(bm4); } //显示大图片5 if(Pic5.equals("")){ NewsImg5.setImageResource(R.drawable.nopic); } else { //填充本地图片 Bitmap bm5=null; try { bm5=BitmapFactory.decodeFile(ALBUM_PATH+Pic5.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm5=BitmapFactory.decodeFile(ALBUM_PATH+Pic5.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg5.setImageBitmap(bm5); } ////////////////////////放大缩小开始//////////////////////////////////////// NewsImg1.setTag("1"); NewsImg1.setOnTouchListener(btnListener); NewsImg2.setTag("2"); NewsImg2.setOnTouchListener(btnListener); NewsImg3.setTag("3"); NewsImg3.setOnTouchListener(btnListener); NewsImg4.setTag("4"); NewsImg4.setOnTouchListener(btnListener); NewsImg5.setTag("5"); NewsImg5.setOnTouchListener(btnListener); /*NewsImg1.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { ImageView view = (ImageView) v; switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); start.set(event.getX(), event.getY()); mode = DRAG; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; } break; case MotionEvent.ACTION_MOVE: if (mode == DRAG) { matrix.set(savedMatrix); matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); } else if (mode == ZOOM) { float newDist = spacing(event); if (newDist > 10f) { matrix.set(savedMatrix); float scale = newDist / oldDist; matrix.postScale(scale, scale, mid.x, mid.y); } } break; } view.setImageMatrix(matrix); return true; } private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y); } private void midPoint(PointF point, MotionEvent event) { float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); point.set(x / 2, y / 2); }});*/ ////////////////////////放大缩小end//////////////////////////////////////// } ////////////滑动使用/////////////////// private class MyPagerAdapter extends PagerAdapter { @Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView(mListViews.get(arg1)); } @Override public void finishUpdate(View arg0) { } @Override public int getCount() { return mListViews.size(); } @Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(mListViews.get(arg1), 0); return mListViews.get(arg1); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) { } } ////////////滑动使用end/////////////////// //显示图片 Handler showImageHandler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg1.setImageBitmap(GG.ByteArrayToBitmap(BImg1)); }finally{} } }; //显示图片 Handler showImageHandler2 = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg2.setImageBitmap(GG.ByteArrayToBitmap(BImg2)); }finally{} } }; //显示图片 Handler showImageHandler3 = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg3.setImageBitmap(GG.ByteArrayToBitmap(BImg3)); }finally{} } }; //显示图片 Handler showImageHandler4 = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg4.setImageBitmap(GG.ByteArrayToBitmap(BImg4)); }finally{} } }; //显示图片5 Handler showImageHandler5 = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg5.setImageBitmap(GG.ByteArrayToBitmap(BImg5)); }finally{} } }; // 放大 private View.OnTouchListener btnListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { String newstag=v.getTag().toString(); ImageView view = (ImageView) v; switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); start.set(event.getX(), event.getY()); mode = DRAG; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; } break; case MotionEvent.ACTION_MOVE: if (mode == DRAG) { matrix.set(savedMatrix); matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); } else if (mode == ZOOM) { float newDist = spacing(event); if (newDist > 10f) { matrix.set(savedMatrix); float scale = newDist / oldDist; matrix.postScale(scale, scale, mid.x, mid.y); } } break; } view.setImageMatrix(matrix); return true; } private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y); } private void midPoint(PointF point, MotionEvent event) { float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); point.set(x / 4, y / 4); }}; }
不知道大家有没有见过腾讯新闻的图片新闻的效果, 一篇新闻有好几张图,点其中一张进入到图片浏览,图片可左右拖动切换,并放大.
用纯js和难实现这样的效果.只能用原生代码来实现.具体的插件制作我就不描述了.可参看之前的文章.
分2个程序,1是插件接口程序.ShowDetailImg.java 用来获取js传递过来的参数.
需要注意的是,在js里,我已经把图片保存到手机了.这里传递图片的地址.
package 你的包名 import org.apache.cordova.api.CallbackContext; import org.apache.cordova.api.CordovaPlugin; import org.json.JSONArray; import org.json.JSONException; import android.content.Intent; import android.util.Log; public class ShowDetailImg extends CordovaPlugin { @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals("ShowDetailImg")) { Log.i("start","starting getpara"); String dhbm=(String) args.get(0).toString(); String picnum=(String) args.get(1).toString(); String nowpic=(String) args.get(2).toString(); String pic1=(String) args.get(3).toString(); String pic2=(String) args.get(4).toString(); String pic3=(String) args.get(5).toString(); String pic4=(String) args.get(6).toString(); String pic5=(String) args.get(7).toString(); String domailurl=(String) args.get(8).toString(); Intent it = new Intent(cordova.getActivity().getApplication(),ShowImgActivity.class); Log.i("======","============"); it.putExtra("dhbm", dhbm); it.putExtra("picnum", picnum); it.putExtra("nowpic", nowpic); it.putExtra("pic1", pic1); it.putExtra("pic2", pic2); it.putExtra("pic3", pic3); it.putExtra("pic4", pic4); it.putExtra("pic5", pic5); it.putExtra("domailurl", domailurl); Log.i("==pic1===",pic1); Log.i("end","go other activety"); cordova.getActivity().startActivity(it); return true; } return false; } }
2.ShowImgActivity.java为具体的图片显示代码.
package 包名; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.PointF; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.FloatMath; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; @SuppressLint("HandlerLeak") public class ShowImgActivity extends Activity { private static final String LOG_TAG = "ShowImgActivity"; private ViewPager myViewPager; private MyPagerAdapter myAdapter; private LayoutInflater mInflater; private List<View> mListViews; private View layout1 = null; private View layout2 = null; private View layout3 = null; private View layout4 = null; private View layout5 = null; private TextView topTip; private TextView Close; private Integer PicNum = 0; private Integer NowPic=0; private String Pic1=""; private String Pic2=""; private String Pic3=""; private String Pic4=""; private String Pic5=""; private ImageView NewsImg1; private ImageView NewsImg2; private ImageView NewsImg3; private ImageView NewsImg4; private ImageView NewsImg5; private byte[] BImg1=null; private byte[] BImg2=null; private byte[] BImg3=null; private byte[] BImg4=null; private byte[] BImg5=null; private final static String ALBUM_PATH = Environment.getExternalStorageDirectory() + "/"; private static final int NONE = 0; private static final int DRAG = 1; private static final int ZOOM = 2; private int mode = NONE; private float oldDist; private Matrix matrix = new Matrix(); private Matrix savedMatrix = new Matrix(); private PointF start = new PointF(); private PointF mid = new PointF(); private String dhcode = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); getWindow().setWindowAnimations(1); setContentView(R.layout.show_img_activity); Log.i("3333","3333"); topTip=(TextView)findViewById(R.id.toptip); Close=(TextView)findViewById(R.id.close); Close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); dhcode=this.getIntent().getStringExtra("dhbm"); this.getIntent().getStringExtra("domailurl"); PicNum = Integer.valueOf(this.getIntent().getStringExtra("picnum")); NowPic=Integer.valueOf(this.getIntent().getStringExtra("nowpic")); Pic1=this.getIntent().getStringExtra("pic1"); Pic2=this.getIntent().getStringExtra("pic2"); Pic3=this.getIntent().getStringExtra("pic3"); Pic4=this.getIntent().getStringExtra("pic4"); Pic5=this.getIntent().getStringExtra("pic5"); Log.i("Pic1",Pic1.toString()); Log.i("Pic2",Pic2.toString()); //////////// myAdapter = new MyPagerAdapter(); myViewPager = (ViewPager) findViewById(R.id.viewpagerLayout); myViewPager.setAdapter(myAdapter); mListViews = new ArrayList<View>(); mInflater = getLayoutInflater(); layout1 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout2 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout3 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout4 = mInflater.inflate(R.layout.show_img_draw_activity, null); layout5 = mInflater.inflate(R.layout.show_img_draw_activity, null); if(PicNum>=1){mListViews.add(layout1);} if(PicNum>=2){mListViews.add(layout2);} if(PicNum>=3){mListViews.add(layout3);} if(PicNum>=4){mListViews.add(layout4);} if(PicNum>=5){mListViews.add(layout5);} NewsImg1=(ImageView)layout1.findViewById(R.id.bigimg); NewsImg2=(ImageView)layout2.findViewById(R.id.bigimg); NewsImg3=(ImageView)layout3.findViewById(R.id.bigimg); NewsImg4=(ImageView)layout4.findViewById(R.id.bigimg); NewsImg5=(ImageView)layout5.findViewById(R.id.bigimg); Log.i("start1","========="); myViewPager.setCurrentItem(NowPic-1); topTip.setText(NowPic+"/"+PicNum); myViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { switch(arg0){ case(0): topTip.setText("1/"+PicNum); /*NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(1): topTip.setText("2/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(2): topTip.setText("3/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(3): topTip.setText("4/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg5.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; case(4): topTip.setText("5/"+PicNum); /*NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null);*/ matrix.set(null); matrix.reset(); break; default: break; } NewsImg1.setImageMatrix(null); NewsImg2.setImageMatrix(null); NewsImg3.setImageMatrix(null); NewsImg4.setImageMatrix(null); NewsImg5.setImageMatrix(null); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { Log.i(LOG_TAG, "uu"+String.valueOf(arg0)); } @Override public void onPageScrollStateChanged(int arg0) { } }); Log.i("tiptops","========="); ///////////// if(Pic1.equals("")){ NewsImg1.setImageResource(R.drawable.nopic); } else { Bitmap bm1=null; try { Log.i("go try 1","==========="); Log.i("album_path",ALBUM_PATH+Pic1); Log.i("dhcode",dhcode); Log.i("===imgpath====",ALBUM_PATH+Pic1.replace("/newsimg", "newsdetail").replace(dhcode, "")); bm1=BitmapFactory.decodeFile(ALBUM_PATH+Pic1.replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg1.setImageBitmap(bm1); } if(Pic2.equals("")){ NewsImg2.setImageResource(R.drawable.nopic); } else { Bitmap bm2=null; try { bm2=BitmapFactory.decodeFile(ALBUM_PATH+Pic2.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm2=BitmapFactory.decodeFile(ALBUM_PATH+Pic2.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg2.setImageBitmap(bm2); } if(Pic3.equals("")){ NewsImg3.setImageResource(R.drawable.nopic); } else { Bitmap bm3=null; try { bm3=BitmapFactory.decodeFile(ALBUM_PATH+Pic3.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm3=BitmapFactory.decodeFile(ALBUM_PATH+Pic3.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg3.setImageBitmap(bm3); } if(Pic4.equals("")){ NewsImg4.setImageResource(R.drawable.nopic); } else { Bitmap bm4=null; try { bm4=BitmapFactory.decodeFile(ALBUM_PATH+Pic4.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm4=BitmapFactory.decodeFile(ALBUM_PATH+Pic4.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg4.setImageBitmap(bm4); } if(Pic5.equals("")){ NewsImg5.setImageResource(R.drawable.nopic); } else { Bitmap bm5=null; try { bm5=BitmapFactory.decodeFile(ALBUM_PATH+Pic5.replace("/newsimg", "newsdetail").replace(dhcode, "")); //bm5=BitmapFactory.decodeFile(ALBUM_PATH+Pic5.replace(domailurl, "").replace("/newsimg", "newsdetail").replace(dhcode, "")); } catch(Exception e) { Log.i(LOG_TAG,"=============="+e.getMessage().toString()); } NewsImg5.setImageBitmap(bm5); } NewsImg1.setTag("1"); NewsImg1.setOnTouchListener(btnListener); NewsImg2.setTag("2"); NewsImg2.setOnTouchListener(btnListener); NewsImg3.setTag("3"); NewsImg3.setOnTouchListener(btnListener); NewsImg4.setTag("4"); NewsImg4.setOnTouchListener(btnListener); NewsImg5.setTag("5"); NewsImg5.setOnTouchListener(btnListener); } private class MyPagerAdapter extends PagerAdapter { public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView(mListViews.get(arg1)); } public void finishUpdate(View arg0) { } public int getCount() { return mListViews.size(); } public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(mListViews.get(arg1), 0); return mListViews.get(arg1); } public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } public void restoreState(Parcelable arg0, ClassLoader arg1) { } public Parcelable saveState() { return null; } public void startUpdate(View arg0) { } } Handler showImageHandler = new Handler() { @SuppressLint("HandlerLeak") public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg1.setImageBitmap(GG.ByteArrayToBitmap(BImg1)); }finally{} } }; @SuppressLint({ "HandlerLeak", "HandlerLeak", "HandlerLeak" }) Handler showImageHandler2 = new Handler() { @SuppressLint("HandlerLeak") public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg2.setImageBitmap(GG.ByteArrayToBitmap(BImg2)); }finally{} } }; Handler showImageHandler3 = new Handler() { @SuppressLint("HandlerLeak") public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg3.setImageBitmap(GG.ByteArrayToBitmap(BImg3)); }finally{} } }; Handler showImageHandler4 = new Handler() { @SuppressLint({ "HandlerLeak", "HandlerLeak" }) public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg4.setImageBitmap(GG.ByteArrayToBitmap(BImg4)); }finally{} } }; Handler showImageHandler5 = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); try { NewsImg5.setImageBitmap(GG.ByteArrayToBitmap(BImg5)); }finally{} } }; private View.OnTouchListener btnListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { ImageView view = (ImageView) v; switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); start.set(event.getX(), event.getY()); mode = DRAG; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; } break; case MotionEvent.ACTION_MOVE: if (mode == DRAG) { matrix.set(savedMatrix); matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); } else if (mode == ZOOM) { float newDist = spacing(event); if (newDist > 10f) { matrix.set(savedMatrix); float scale = newDist / oldDist; matrix.postScale(scale, scale, mid.x, mid.y); } } break; } view.setImageMatrix(matrix); return true; } private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y); } private void midPoint(PointF point, MotionEvent event) { float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); point.set(x / 4, y / 4); }}; }
/res/layout 加入show_img_activity.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/uptext" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"> <TextView android:id="@+id/toptip" android:layout_marginLeft="6dp" android:layout_marginTop="3dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1/1" android:textSize="16dp"/> <TextView android:id="@+id/close" android:layout_marginLeft="12dp" android:layout_marginTop="3dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭" android:textSize="16dp"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/down" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:orientation="vertical"> <!-- top --> <!-- top end--> <android.support.v4.view.ViewPager android:id="@+id/viewpagerLayout" android:layout_height="fill_parent" android:layout_width="fill_parent"/> </LinearLayout> <!--底部五大按钮 --> <!--底部五大按钮结束 --> <!-- <FrameLayout android:layout_width="match_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/aaa" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="bottom|center"> <ImageView android:id="@+id/first" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/setting_verson"/> </LinearLayout> </FrameLayout> --> </LinearLayout>
res/layot/show_img_draw_activity.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical|center_horizontal" android:orientation="vertical" android:padding="10dp" android:background="#000000" > <ImageView android:id="@+id/bigimg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center_horizontal" android:paddingBottom="160dp" android:paddingTop="160dp" android:scaleType="matrix" android:src="@drawable/nopic" /> </LinearLayout>
效果如下图,可左右拖动,双手指放大.当前页数,关闭按钮.