android小知识

来源:互联网 发布:板式家具算料软件 编辑:程序博客网 时间:2024/06/07 23:10

 

android多点触摸缩放图片

[java] view plaincopy
  1.    
  2.   /** 
  3.    * 自定义触摸事件 
  4.    * @author tian 
  5.    * 
  6.    */  
  7. rivate class TouchListener implements OnTouchListener{  
  8.  private PointF startPoint = new PointF();  
  9.     private Matrix matrix = new Matrix();  
  10.     private Matrix currentMaritx = new Matrix();  
  11.       
  12.     private int mode = 0;//用于标记模式  
  13.     private static final int DRAG = 1;//拖动  
  14.     private static final int ZOOM = 2;//放大  
  15.     private float startDis = 0;  
  16.     private PointF midPoint;//中心点  
  17. @Override  
  18. public boolean onTouch(View v, MotionEvent event) {  
  19.     // TODO Auto-generated method stub  
  20.     switch (event.getAction() & MotionEvent.ACTION_MASK)  
  21.     {  
  22.         case MotionEvent.ACTION_DOWN:  
  23.             mode = DRAG;  
  24.             currentMaritx.set(imageView.getImageMatrix());//记录ImageView当期的移动位置  
  25.             startPoint.set(event.getX(),event.getY());//开始点  
  26.             break;  
  27.         case MotionEvent.ACTION_MOVE://移动事件  
  28.             if (mode == DRAG) {//图片拖动事件  
  29.                 float dx = event.getX() - startPoint.x;//x轴移动距离  
  30.                 float dy = event.getY() - startPoint.y;  
  31.                 matrix.set(currentMaritx);//在当前的位置基础上移动  
  32.                 matrix.postTranslate(dx, dy);  
  33.                 } else if(mode == ZOOM)  
  34.                     {//图片放大事件  
  35.                         float endDis = distance(event);//结束距离  
  36.                         if(endDis > 10f){  
  37.                             float scale = endDis / startDis;//放大倍数  
  38.                             matrix.set(currentMaritx);  
  39.                             matrix.postScale(scale, scale, midPoint.x, midPoint.y);  
  40.                         }  
  41.                     }  
  42.             break;  
  43.      case MotionEvent.ACTION_UP:  
  44.         mode = 0;  
  45.         break;  
  46.        //有手指离开屏幕,但屏幕还有触点(手指)  
  47.      case MotionEvent.ACTION_POINTER_UP:  
  48.         mode = 0;  
  49.         break;  
  50.        //当屏幕上已经有触点(手指),再有一个手指压下屏幕  
  51.      case MotionEvent.ACTION_POINTER_DOWN:  
  52.         mode = ZOOM;  
  53.         startDis = distance(event);  
  54.         if(startDis > 10f){//避免手指上有两个茧  
  55.          midPoint = mid(event);  
  56.          currentMaritx.set(imageView.getImageMatrix());//记录当前的缩放倍数  
  57.         }  
  58.         break;  
  59.        }  
  60.       
  61.         imageView.setImageMatrix(matrix);  
  62.         return true;  
  63.       }  
  64.     }  
  65.         /** 
  66.          * 两点之间的距离 
  67.          * @param event 
  68.          * @return 
  69.          */  
  70.         private static float distance(MotionEvent event){  
  71.          //两根线的距离  
  72.          float dx = event.getX(1) - event.getX(0);  
  73.          float dy = event.getY(1) - event.getY(0);  
  74.          return FloatMath.sqrt(dx*dx + dy*dy);  
  75.         }  
  76.         /** 
  77.          * 计算两点之间中心点的距离 
  78.          * @param event 
  79.          * @return 
  80.          */  
  81.         private static PointF mid(MotionEvent event){  
  82.          float midx = event.getX(1) + event.getX(0);  
  83.          float midy = event.getY(1) - event.getY(0);  
  84.          return new PointF(midx/2, midy/2);  
  85.         }  
 

android保存图片到SD卡并以时间命名


[java] view plaincopy
  1. private void storeInSD(Bitmap bitmap1) {  
  2.         File file = new File(FILE_DIR);  
  3.                     if (!file.exists()) {  
  4.                         file.mkdir();  
  5.                     }  
  6.                     File imageFile = new File(file, FileUtils.getFileName() + ".png");  
  7.                     try {  
  8.                         imageFile.createNewFile();  
  9.                         FileOutputStream fos = new FileOutputStream(imageFile);  
  10.                         bitmap1.compress(CompressFormat.PNG, 50, fos);  
  11.                           
  12.                         Toast.makeText(MainActivity.this"保存成功!"1);  
  13.                           
  14.                         fos.flush();  
  15.                         fos.close();  
  16.                     } catch (FileNotFoundException e) {  
  17.                         e.printStackTrace();  
  18.                         Toast.makeText(MainActivity.this"保存失败!"1);  
  19.                     } catch (IOException e) {  
  20.                         // TODO Auto-generated catch block  
  21.                         e.printStackTrace();  
  22.                         Toast.makeText(MainActivity.this"保存失败!"1);  
  23.                     }  
  24.                 }  


[java] view plaincopy
  1. public static String getCharacterAndNumber() {  
  2.         String rel="";  
  3.         SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");   
  4.         Date curDate = new Date(System.currentTimeMillis());  
  5.         rel = formatter.format(curDate);     
  6.         return rel;  
  7.     }  

[java] view plaincopy
  1. public static String getFileName() {  
  2.         // mu  
  3.         //String fileNameRandom = getCharacterAndNumber(8);  
  4.         String fileNameRandom = getCharacterAndNumber();  
  5.         return  fileNameRandom;  
  6.     }  
 

android实现自动关机代码


  1. private void shutdown() {  
  2.             try {  
  3.                 Process process = Runtime.getRuntime().exec("su");  
  4.                 DataOutputStream out = new DataOutputStream(  
  5.                         process.getOutputStream());  
  6.                 out.writeBytes("reboot -p\n");  
  7.                 out.writeBytes("exit\n");  
  8.                 out.flush();  
  9.             } catch (IOException e) {  
  10.                 e.printStackTrace();  
  11.             }  
  12.         }  
Note:手机必须获取Root权限!!!


 

android 自定义listview无法响应点击事件OnItemClickListener

转载自:http://blog.csdn.net/qzzsunly/article/details/7824591

如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了

   我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendants”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItemClick()方法了。

如何为ListView加上快速滑块,是否可以修改快速滑块图像呢?

1.android:fastScrollEnabled="true"

2.Listview组件没有提供修改快速滑块的图像的API,因此不能直接修改,需要用java的反射技术修改

[java] view plaincopy
  1. listView1 = (ListView)findViewById(R.id.listView1);  
  2.         listView1.setFastScrollEnabled(true);  
  3.         //获取FastScroller对象  
  4.         try {  
  5.             Field field = AbsListView.class.getDeclaredField("mFastScroller");  
  6.             field.setAccessible(true);  
  7.             Object obj = field.get(listView1);  
  8.             //获取FastScroller.mThumbDrable变量的Field对象  
  9.             field = field.getType().getDeclaredField("mThumbDrawable");  
  10.             field.setAccessible(true);  
  11.             //获取FastScroller.mThumbDrable的值  
  12.             Drawable drawable = (Drawable)field.get(obj);  
  13.             drawable = getResources().getDrawable(R.drawable.ic_launcher);  
  14.             field.set(obj, drawable);  
  15.               
  16.         } catch (Exception e) {  
  17.             // TODO Auto-generated catch block  
  18.             e.printStackTrace();  
  19.         }  

运行效果:

android TextView图文混写 嵌入表情
  1. private void setImageText()  
  2.     {  
  3.         //根据ID获取图像的Bitmap对象  
  4.         Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);  
  5.         //创建imageSpan对象  
  6.         ImageSpan imageSpan = new ImageSpan(this, bitmap);  
  7.         //创建一个SpannableString对imageSpan进行封装  
  8.         SpannableString spannableString = new SpannableString("icon哇咔咔");  
  9.         //用ImageSpan对象替换icon  
  10.         spannableString.setSpan(imageSpan, 04, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  11.         tv_hello.setText(spannableString);  
  12.     }  
彻底退出android程序的方法
[java] view plaincopy
  1. package com.cqupt.util;  
  2. import java.util.LinkedList;  
  3. import java.util.List;  
  4.   
  5. import android.app.Activity;  
  6. import android.app.Application;  
  7.   
  8. public class ExitApplication extends Application {  
  9.   
  10.     private List<Activity> activityList = new LinkedList();  
  11.     private static ExitApplication instance;  
  12.   
  13.     private ExitApplication()  
  14.     {  
  15.     }  
  16.     //单例模式中获取唯一的ExitApplication实例  
  17.     public static ExitApplication getInstance()  
  18.     {  
  19.     if(null == instance)  
  20.     {  
  21.     instance = new ExitApplication();  
  22.     }  
  23.     return instance;   
  24.   
  25.     }  
  26.     //添加Activity到容器中  
  27.     public void addActivity(Activity activity)  
  28.     {  
  29.         activityList.add(activity);  
  30.     }  
  31.     //遍历所有Activity并finish  
  32.   
  33.     public void exit()  
  34.     {  
  35.   
  36.         for(Activity activity : activityList)  
  37.         {  
  38.             activity.finish();  
  39.         }  
  40.   
  41.         System.exit(0);  
  42.   
  43.     }  
  44.     }  

在每个Activity的OnCreate方法里面写上

[java] view plaincopy
  1. ExitApplication.getInstance().addActivity(this);  

在要结束程序的地方:

[java] view plaincopy
  1. if (!isExit) {  
  2.                     Toast.makeText(MoreActivity.this"再点一次退出程序", Toast.LENGTH_SHORT).show();  
  3.                     isExit = true;  
  4.                 }else{  
  5.                     ExitApplication.getInstance().exit();  
  6.                 }  

转载自:http://www.yoyong.com/archives/199

0 0