Dialog七种模式详解

注意:

               点击按钮都会自动关闭对话框,点击对话框外也会导致对话框消失

               屏蔽点击对话框外消失loginDialog是我声明的DIALOG对象)

              loginDialog.setCanceledOnTouchOutside(false);

               屏蔽点击按钮自动消失

                        try {
                                Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
                                field.setAccessible(true);
                                field.set(dialog, true);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }

               显示对话框

                        try {
                                Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
                                field.setAccessible(true);
                                field.set(dialog, true);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }


今天我用自己写的一个Demo 和大家详细介绍一个Android中的对话框的使用技巧。 

 

 


 




1.确定取消对话框

对话框中有2个按钮   通过调用 setPositiveButton 方法 和 setNegativeButton 方法 可以设置按钮的显示内容以及按钮的监听事件。

 

 

 

 


 

 

 

我们使用AlerDialog 创建对话框

 


 

 

AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);  


 

 


使用builder设置对话框的title button icon 等等

 

builder.setIcon(R.drawable.icon);  

       builder.setTitle("你确定要离开吗?");  

       builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  

           public void onClick(DialogInterface dialog, int whichButton) {  

               //这里添加点击确定后的逻辑 

               showDialog("你选择了确定");  

           }  

       });  

       builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {  

           public void onClick(DialogInterface dialog, int whichButton) {  

               //这里添加点击确定后的逻辑 

               showDialog("你选择了取消");  

           }  

       });  

       builder.create().show();  



 


  这个dialog用于现实onClick后监听的内容信息

 


 

private void showDialog(String str) {  

new AlertDialog.Builder(MainDialog.this)  

     .setMessage(str)  

     .show();  

}  



 




2.多个按钮信息框

 

 


 

 

 

AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);           

builder.setIcon(R.drawable.icon);  

builder.setTitle("投票");  

builder.setMessage("您认为什么样的内容能吸引您?");  

builder.setPositiveButton("有趣味的", new DialogInterface.OnClickListener() {  

    public void onClick(DialogInterface dialog, int whichButton) {  

        showDialog("你选择了有趣味的");  

    }  

});  

builder.setNeutralButton("有思想的", new DialogInterface.OnClickListener() {  

    public void onClick(DialogInterface dialog, int whichButton) {  

        showDialog("你选择了有思想的");                      

    }  

});  

builder.setNegativeButton("主题强的", new DialogInterface.OnClickListener() {  

    public void onClick(DialogInterface dialog, int whichButton) {  

        showDialog("你选择了主题强的");    

    }  

});  

builder.create().show();  



 





3.列表框

 

 


 


这个数组用于列表选择


 

 

final String[] mItems = {"item0","item1","itme2","item3","itme4","item5","item6"};  

AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);   

        builder.setTitle("列表选择框");  

        builder.setItems(mItems, new DialogInterface.OnClickListener() {  

            public void onClick(DialogInterface dialog, int which) {  

                //点击后弹出窗口选择了第几项 

                showDialog("你选择的id为" + which + " , " + mItems[which]);  

            }  

        });  

        builder.create().show();  





4.单项选择列表框

 

 

 


mSingleChoice 用于记录单选中的ID

 

 

int mSingleChoiceID = -1;  

AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);   

  

mSingleChoiceID = -1;  

builder.setIcon(R.drawable.icon);  

    builder.setTitle("单项选择");  

    builder.setSingleChoiceItems(mItems, 0, new DialogInterface.OnClickListener() {  

        public void onClick(DialogInterface dialog, int whichButton) {  

                mSingleChoiceID = whichButton;  

                showDialog("你选择的id为" + whichButton + " , " + mItems[whichButton]);  

        }  

    });  

    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  

        public void onClick(DialogInterface dialog, int whichButton) {  

            if(mSingleChoiceID > 0) {  

            showDialog("你选择的是" + mSingleChoiceID);  

            }  

        }  

    });  

    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {  

        public void onClick(DialogInterface dialog, int whichButton) {  

  

        }  

    });  

   builder.create().show();  



 





5.进度条框

 

 


 


点击进度条框按钮后 开启一个线程计算读取的进度 假设读取结束为 100
Progress
在小于100的时候一直在线程中做循环++ 只到读取结束后,停止线程。

 


 

  

       mProgressDialog = new ProgressDialog(MainDialog.this);  

     mProgressDialog.setIcon(R.drawable.icon);  

     mProgressDialog.setTitle("进度条窗口");  

     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  

     mProgressDialog.setMax(MAX_PROGRESS);  

     mProgressDialog.setButton("确定", new DialogInterface.OnClickListener() {  

         public void onClick(DialogInterface dialog, int whichButton) {  

             //这里添加点击后的逻辑 

         }  

     });  

     mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener() {  

         public void onClick(DialogInterface dialog, int whichButton) {  

             //这里添加点击后的逻辑 

         }  

     });  

     mProgressDialog.show();  

     new Thread(this).start();  

  

public void run() {  

int Progress = 0;  

while(Progress < MAX_PROGRESS) {  

try {  

    Thread.sleep(100);  

    Progress++;    

    mProgressDialog.incrementProgressBy(1);  

} catch (InterruptedException e) {  

    // TODO Auto-generated catch block 

    e.printStackTrace();  

}  

   

}  



 



6.多项选择列表框



 

 

 



 


MultiChoiceID 用于记录多选选中的id号 存在ArrayList中
选中后 add 进ArrayList
取消选中后 remove 出ArrayList。

 

ArrayList <Integer>MultiChoiceID = new ArrayList <Integer>();  

 

AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);   

  

MultiChoiceID.clear();  

builder.setIcon(R.drawable.icon);  

    builder.setTitle("多项选择");  

    builder.setMultiChoiceItems(mItems,  

            new boolean[]{false, false, false, false, false, false, false},  

            new DialogInterface.OnMultiChoiceClickListener() {  

                public void onClick(DialogInterface dialog, int whichButton,  

                        boolean isChecked) {  

                   if(isChecked) {  

                       MultiChoiceID.add(whichButton);  

                       showDialog("你选择的id为" + whichButton + " , " + mItems[whichButton]);  

                   }else {  

                       MultiChoiceID.remove(whichButton);  

                   }  

                      

                }  

            });  

    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  

        public void onClick(DialogInterface dialog, int whichButton) {  

            String str = "";  

            int size = MultiChoiceID.size();  

            for (int i = 0 ;i < size; i++) {  

            str+= mItems[MultiChoiceID.get(i)] + ", ";  

            }  

            showDialog("你选择的是" + str);  

        }  

    });  

    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {  

        public void onClick(DialogInterface dialog, int whichButton) {  

  

        }  

    });  

   builder.create().show();  



 



7.自定义布局

 

 


 


讲到自定义布局我就得多说一说了,为什么要多说一说呢? 
其实自定义布局在Android的开发中非常重要 因为它能让开发者做出自己五彩缤纷的Activity 而不用去使用系统枯燥的界面。

自定义dialog有什么好处?

比如我们在开发过长当中 要通过介绍系统发送的一个广播弹出一个dialog . 但是dialog必需是基于activity才能呈现出来 如果没有activity 的话 程序就会崩溃。所以我们可以写一个自定义的 dialog 把它定义成一个activity
这样我们收到一条打开dialog的广播后 直接启动这个 activity  程序正常运行~~ 

这就是自定义dialog的好处。

注明:下面这个例子只是写了自定义dialog 没有把它单独的写在一个activity中 如果须要的话 可以自己改一下。


 

AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);   

 LayoutInflater factory = LayoutInflater.from(this);  

 final View textEntryView = factory.inflate(R.layout.test, null);  

     builder.setIcon(R.drawable.icon);  

     builder.setTitle("自定义输入框");  

     builder.setView(textEntryView);  

     builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  

         public void onClick(DialogInterface dialog, int whichButton) {  

           

         EditText userName = (EditText) textEntryView.findViewById(R.id.etUserName);  

         EditText password = (EditText) textEntryView.findViewById(R.id.etPassWord);  

         showDialog("姓名 :"  + userName.getText().toString()  + "密码:" + password.getText().toString() );  

         }  

     });  

     builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {  

         public void onClick(DialogInterface dialog, int whichButton) {  

  

         }  

     });  

   builder.create().show();  



 


<?xml version="1.0" encoding="utf-8"?>  

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 

android:layout_height="wrap_content" 

android:layout_width="wrap_content" 

android:orientation="horizontal" 

android:id="@+id/dialog">  

<LinearLayout 

android:layout_height="wrap_content" 

android:layout_width="wrap_content" 

android:orientation="horizontal" 

android:id="@+id/dialogname">  

  

<TextView android:layout_height="wrap_content" 

 android:layout_width="wrap_content" 

 android:id="@+id/tvUserName" 

 android:text="姓名:"/>  

<EditText android:layout_height="wrap_content" 

 android:layout_width="wrap_content" 

 android:id="@+id/etUserName" 

 android:minWidth="200dip"/>  

</LinearLayout>    

<LinearLayout 

android:layout_height="wrap_content" 

android:layout_width="wrap_content" 

android:orientation="horizontal" 

android:id="@+id/dialognum" 

 android:layout_below="@+id/dialogname" 

>  

  <TextView android:layout_height="wrap_content" 

 android:layout_width="wrap_content" 

 android:id="@+id/tvPassWord" 

 android:text="密码:"/>  

<EditText android:layout_height="wrap_content" 

 android:layout_width="wrap_content" 

 android:id="@+id/etPassWord" 

 android:minWidth="200dip"/>  

 </LinearLayout>    

  </RelativeLayout>  



 


 

 

 


8.
读取进度框

显示一个正在转圈的进度条loading

 


mProgressDialog = new ProgressDialog(this);  

 mProgressDialog.setTitle("读取ing");  

 mProgressDialog.setMessage("正在读取中请稍候");  

 mProgressDialog.setIndeterminate(true);  

 mProgressDialog.setCancelable(true);  

 mProgressDialog.show();  

 

 

 





最后如果你还是觉得我写的不够详细 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习 雨松MOMO希望可以和大家一起进步。

下载地址:http://download.youkuaiyun.com/source/3438085

 

自定义View界面大合集

 

 





 

 

 

雨松MOMO带大家盘点Android 中的自定义View界面的绘制


今天我用自己写的一个Demo 和大家详细介绍一个Android中自定义View中的使用与绘制技巧。


 


 



1.自定义view绘制字符串

 

       
       相信在实际开发过程中必然很多地方都须要用到系统字 为什么会用到系统字? 方便 省内存 我相信做过J2ME游戏开发的朋友应该深知内存有多么多么重要  而且使用它还可以带来一个更重要的好处就是很方便的可以实现多国语言的切换 笔者现在在正在做的一个产品就是可以多语言切换的软件  有英语 繁体中文 等等 设想如果使用图片字的话那每个语言都须要出一套图,我用一个例子简单介绍一下绘制字符串。

 


 

 

 


 

 1 package cn.m15.xys;  
 2 
 3   
 4 
 5 import android.app.Activity;  
 6 
 7 import android.content.Context;  
 8 
 9 import android.graphics.Canvas;  
 10 
 11 import android.graphics.Color;  
 12 
 13 import android.graphics.Paint;  
 14 
 15 import android.graphics.Paint.FontMetrics;  
 16 
 17 import android.os.Bundle;  
 18 
 19 import android.view.Display;  
 20 
 21 import android.view.View;  
 22 
 23   
 24 
 25 public class Font extends Activity {  
 26 
 27     public int mScreenWidth = 0;  
 28 
 29     public int mScreenHeight = 0;  
 30 
 31     @Override  
 32 
 33     protected void onCreate(Bundle savedInstanceState) {  
 34 
 35     setContentView(new FontView(this));  
 36 
 37     // 获取屏幕宽高 
 38 
 39     Display display = getWindowManager().getDefaultDisplay();  
 40 
 41     mScreenWidth  = display.getWidth();  
 42 
 43     mScreenHeight = display.getHeight();  
 44 
 45     super.onCreate(savedInstanceState);  
 46 
 47   
 48 
 49     }  
 50 
 51   
 52 
 53     class FontView extends View {  
 54 
 55         public final static String STR_WIDTH = "获取字符串宽为:";   
 56 
 57         public final static String STR_HEIGHT = "获取字体高度为:";   
 58 
 59         Paint mPaint = null;  
 60 
 61           
 62 
 63     public FontView(Context context) {  
 64 
 65         super(context);  
 66 
 67         mPaint = new Paint();  
 68 
 69     }  
 70 
 71   
 72 
 73     @Override  
 74 
 75     protected void onDraw(Canvas canvas) {  
 76 
 77         //设置字符串颜色 
 78 
 79         mPaint.setColor(Color.WHITE);  
 80 
 81         canvas.drawText("当前屏幕宽" + mScreenWidth, 0, 30, mPaint);  
 82 
 83         canvas.drawText("当前屏幕高"+ mScreenHeight, 0, 60, mPaint);  
 84 
 85         //设置字体大小 
 86 
 87         mPaint.setColor(Color.RED);  
 88 
 89         mPaint.setTextSize(18);  
 90 
 91         canvas.drawText("字体大小为18", 0, 90, mPaint);  
 92 
 93         //消除字体锯齿 
 94 
 95         mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);  
 96 
 97         canvas.drawText("消除字体锯齿后", 0, 120, mPaint);  
 98 
 99         //获取字符串宽度 
100 
101         canvas.drawText(STR_WIDTH + getStringWidth(STR_WIDTH), 0, 150, mPaint);  
102 
103         //获取字体高度 
104 
105         canvas.drawText(STR_HEIGHT + getFontHeight(), 0, 180, mPaint);  
106 
107         //从string.xml读取字符串绘制 
108 
109         mPaint.setColor(Color.YELLOW);  
110 
111         canvas.drawText(getResources().getString(R.string.string_font), 0, 210, mPaint);  
112 
113         super.onDraw(canvas);  
114 
115     }  
116 
117       
118 
119     /** 
120 
121  * 获取字符串宽 
122 
123  * @param str 
124 
125  * @return 
126 
127 */  
128 
129     private int getStringWidth(String str) {  
130 
131         return (int) mPaint.measureText(STR_WIDTH);   
132 
133     }  
134 
135     /* 
136 
137  * 获取字体高度 
138 
139 */  
140 
141     private int getFontHeight() {  
142 
143         FontMetrics fm = mPaint.getFontMetrics();  
144 
145         return (int)Math.ceil(fm.descent - fm.top) + 2;  
146 
147     }  
148 
149     }  
150 
151 }  



 


 
2.绘制无规则几何图形

        绘制无规则几何图形似乎在实际工作中很少可以用到 原因是用程序去绘制图形即使在精准再好看也不会有美术出的图片好看 但是使用程序绘制图形作为学习来说却是基础中的基础,所以建议大家都看一看。

 

 


 

 

 


 

 1 package cn.m15.xys;  
 2 
 3   
 4 
 5 import android.app.Activity;  
 6 
 7 import android.content.Context;  
 8 
 9 import android.graphics.Canvas;  
 10 
 11 import android.graphics.Color;  
 12 
 13 import android.graphics.Paint;  
 14 
 15 import android.graphics.Path;  
 16 
 17 import android.graphics.RectF;  
 18 
 19 import android.os.Bundle;  
 20 
 21 import android.view.View;  
 22 
 23   
 24 
 25 public class Geometry extends Activity {  
 26 
 27     public int mScreenWidth = 0;  
 28 
 29     public int mScreenHeight = 0;  
 30 
 31   
 32 
 33     @Override  
 34 
 35     protected void onCreate(Bundle savedInstanceState) {  
 36 
 37     setContentView(new GeometryView(this));  
 38 
 39     super.onCreate(savedInstanceState);  
 40 
 41   
 42 
 43     }  
 44 
 45   
 46 
 47     class GeometryView extends View {  
 48 
 49     Paint mPaint = null;  
 50 
 51   
 52 
 53     public GeometryView(Context context) {  
 54 
 55         super(context);  
 56 
 57         mPaint = new Paint();  
 58 
 59         mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);  
 60 
 61     }  
 62 
 63   
 64 
 65     @Override  
 66 
 67     protected void onDraw(Canvas canvas) {  
 68 
 69         super.onDraw(canvas);  
 70 
 71       
 72 
 73         //设置画布颜色 也就是背景颜色 
 74 
 75         canvas.drawColor(Color.WHITE);  
 76 
 77          
 78 
 79         mPaint.setColor(Color.BLACK);  
 80 
 81         canvas.drawText("绘制无规则几何图形喔!!!", 150, 30, mPaint);  
 82 
 83           
 84 
 85         //绘制一条线 
 86 
 87         mPaint.setColor(Color.BLACK);  
 88 
 89         mPaint.setStrokeWidth(4);  
 90 
 91         canvas.drawLine(0, 0, 100, 100, mPaint);  
 92 
 93           
 94 
 95         //绘制一个矩形 
 96 
 97         mPaint.setColor(Color.YELLOW);  
 98 
 99         canvas.drawRect(0, 120, 100, 200, mPaint);  
100 
101           
102 
103         //绘制一个圆形 
104 
105         mPaint.setColor(Color.BLUE);  
106 
107         canvas.drawCircle(80, 300, 50, mPaint);  
108 
109           
110 
111         //绘制一个椭圆 
112 
113         mPaint.setColor(Color.CYAN);  
114 
115         canvas.drawOval(new RectF(300,370,120,100), mPaint);  
116 
117           
118 
119         //绘制多边形 
120 
121         mPaint.setColor(Color.BLACK);  
122 
123         Path path = new Path();  
124 
125         path.moveTo(150+5 , 400 -50);  
126 
127         path.lineTo(150+45, 400 - 50);  
128 
129         path.lineTo(150+30, 460 - 50);  
130 
131         path.lineTo(150+20, 460 - 50);  
132 
133         path.close();  
134 
135         canvas.drawPath(path, mPaint);  
136 
137           
138 
139     }  
140 
141     }  
142 
143 }  



 



3.图片的绘制以及旋转缩放的实现


        在这点上Android 确实比J2ME 强大很多  手机游戏开发最痛苦的是什么?? 是游戏引擎的开发,但是工程师会把大部分时间浪费在对坐标上,如果写引擎的时候没有把自适应考虑周全后期会非常痛苦,现在手机屏幕分辨率是各式各样 内存大小也是各式各样 所以可见自适应屏幕算法有多么的重要。


 


 



 


 

 1 package cn.m15.xys;  
 2 
 3   
 4 
 5 import android.app.Activity;  
 6 
 7 import android.content.Context;  
 8 
 9 import android.graphics.Bitmap;  
 10 
 11 import android.graphics.BitmapFactory;  
 12 
 13 import android.graphics.Canvas;  
 14 
 15 import android.graphics.Matrix;  
 16 
 17 import android.graphics.Paint;  
 18 
 19 import android.os.Bundle;  
 20 
 21 import android.view.View;  
 22 
 23 import android.view.View.OnClickListener;  
 24 
 25 import android.widget.Button;  
 26 
 27 import android.widget.LinearLayout;  
 28 
 29   
 30 
 31 public class Image extends Activity {  
 32 
 33     ImageView imageView = null;  
 34 
 35   
 36 
 37     @Override  
 38 
 39     protected void onCreate(Bundle savedInstanceState) {  
 40 
 41     imageView = new ImageView(this);  
 42 
 43     setContentView(R.layout.image);  
 44 
 45     LinearLayout ll = (LinearLayout) findViewById(R.id.iamgeid);  
 46 
 47     ll.addView(imageView);  
 48 
 49     // 向左移动 
 50 
 51     Button botton0 = (Button) findViewById(R.id.buttonLeft);  
 52 
 53     botton0.setOnClickListener(new OnClickListener() {  
 54 
 55         @Override  
 56 
 57         public void onClick(View arg0) {  
 58 
 59         imageView.setPosLeft();  
 60 
 61         }  
 62 
 63     });  
 64 
 65   
 66 
 67     // 向右移动 
 68 
 69     Button botton1 = (Button) findViewById(R.id.buttonRight);  
 70 
 71     botton1.setOnClickListener(new OnClickListener() {  
 72 
 73         @Override  
 74 
 75         public void onClick(View arg0) {  
 76 
 77         imageView.setPosRight();  
 78 
 79         }  
 80 
 81     });  
 82 
 83     // 左旋转 
 84 
 85     Button botton2 = (Button) findViewById(R.id.buttonRotationLeft);  
 86 
 87     botton2.setOnClickListener(new OnClickListener() {  
 88 
 89         @Override  
 90 
 91         public void onClick(View arg0) {  
 92 
 93         imageView.setRotationLeft();  
 94 
 95         }  
 96 
 97     });  
 98 
 99   
100 
101     // 右旋转 
102 
103     Button botton3 = (Button) findViewById(R.id.buttonRotationRight);  
104 
105     botton3.setOnClickListener(new OnClickListener() {  
106 
107         @Override  
108 
109         public void onClick(View arg0) {  
110 
111         imageView.setRotationRight();  
112 
113         }  
114 
115     });  
116 
117   
118 
119     // 缩小 
120 
121     Button botton4 = (Button) findViewById(R.id.buttonNarrow);  
122 
123     botton4.setOnClickListener(new OnClickListener() {  
124 
125   
126 
127         @Override  
128 
129         public void onClick(View arg0) {  
130 
131         imageView.setNarrow();  
132 
133         }  
134 
135     });  
136 
137   
138 
139     // 放大 
140 
141     Button botton5 = (Button) findViewById(R.id.buttonEnlarge);  
142 
143     botton5.setOnClickListener(new OnClickListener() {  
144 
145   
146 
147         @Override  
148 
149         public void onClick(View arg0) {  
150 
151         imageView.setEnlarge();  
152 
153         }  
154 
155     });  
156 
157   
158 
159     super.onCreate(savedInstanceState);  
160 
161   
162 
163     }  
164 
165   
166 
167     class ImageView extends View {  
168 
169     Paint mPaint = null;  
170 
171     Bitmap bitMap = null;  
172 
173     Bitmap bitMapDisplay = null;  
174 
175     int m_posX = 120;  
176 
177     int m_posY = 50;  
178 
179     int m_bitMapWidth = 0;  
180 
181     int m_bitMapHeight = 0;  
182 
183     Matrix mMatrix = null;  
184 
185     float mAngle = 0.0f;  
186 
187     float mScale = 1f;//1为原图的大小 
188 
189   
190 
191     public ImageView(Context context) {  
192 
193         super(context);  
194 
195         mPaint = new Paint();  
196 
197         mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);  
198 
199         bitMap = BitmapFactory.decodeResource(this.getResources(),  
200 
201             R.drawable.image);  
202 
203         bitMapDisplay = bitMap;  
204 
205         mMatrix = new Matrix();  
206 
207         // 获取图片宽高 
208 
209         m_bitMapWidth = bitMap.getWidth();  
210 
211         m_bitMapHeight = bitMap.getHeight();  
212 
213     }  
214 
215   
216 
217     // 向左移动 
218 
219     public void setPosLeft() {  
220 
221         m_posX -= 10;  
222 
223     }  
224 
225   
226 
227     // 向右移动 
228 
229     public void setPosRight() {  
230 
231         m_posX += 10;  
232 
233     }  
234 
235   
236 
237     // 向左旋转 
238 
239     public void setRotationLeft() {  
240 
241         mAngle--;  
242 
243         setAngle();  
244 
245     }  
246 
247   
248 
249     // 向右旋转 
250 
251     public void setRotationRight() {  
252 
253         mAngle++;  
254 
255         setAngle();  
256 
257     }  
258 
259   
260 
261     // 缩小图片 
262 
263     public void setNarrow() {  
264 
265         if (mScale > 0.5) {  
266 
267         mScale -= 0.1;  
268 
269         setScale();  
270 
271         }  
272 
273     }  
274 
275   
276 
277     // 放大图片 
278 
279     public void setEnlarge() {  
280 
281         if (mScale < 2) {  
282 
283         mScale += 0.1;  
284 
285         setScale();  
286 
287         }  
288 
289     }  
290 
291   
292 
293     // 设置缩放比例 
294 
295     public void setAngle() {  
296 
297         mMatrix.reset();  
298 
299         mMatrix.setRotate(mAngle);  
300 
301         bitMapDisplay = Bitmap.createBitmap(bitMap, 0, 0, m_bitMapWidth,  
302 
303             m_bitMapHeight, mMatrix, true);  
304 
305     }  
306 
307   
308 
309     // 设置旋转比例 
310 
311     public void setScale() {  
312 
313         mMatrix.reset();  
314 
315         //float sx X轴缩放 
316 
317 //float sy Y轴缩放 
318 
319         mMatrix.postScale(mScale, mScale);  
320 
321         bitMapDisplay = Bitmap.createBitmap(bitMap, 0, 0, m_bitMapWidth,  
322 
323             m_bitMapHeight, mMatrix, true);  
324 
325     }  
326 
327   
328 
329     @Override  
330 
331     protected void onDraw(Canvas canvas) {  
332 
333         super.onDraw(canvas);  
334 
335         canvas.drawBitmap(bitMapDisplay, m_posX, m_posY, mPaint);  
336 
337         invalidate();  
338 
339     }  
340 
341     }  
342 
343 }  



 

 

 


 

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:id="@+id/iamgeid"  

    android:orientation="vertical"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    >  

        <Button android:id="@+id/buttonLeft"  

            android:layout_width="fill_parent" android:layout_height="wrap_content"  

            android:text="图片向左移动"  

            />  

        <Button android:id="@+id/buttonRight"  

            android:layout_width="fill_parent" android:layout_height="wrap_content"  

            android:text="图片向右移动"  

            />  

        <Button android:id="@+id/buttonRotationLeft"  

            android:layout_width="fill_parent" android:layout_height="wrap_content"  

            android:text="图片左旋转"  

            />  

        <Button android:id="@+id/buttonRotationRight"  

            android:layout_width="fill_parent" android:layout_height="wrap_content"  

            android:text="图片右旋转"  

            />  

        <Button android:id="@+id/buttonNarrow"  

            android:layout_width="fill_parent" android:layout_height="wrap_content"  

            android:text="图片缩小"  

            />  

        <Button android:id="@+id/buttonEnlarge"  

            android:layout_width="fill_parent" android:layout_height="wrap_content"  

            android:text="图片放大"  

            />  

</LinearLayout>  



 


4.播放frame动画


        做游戏的话播放动画可就是必不可少的元素 帧动画帧动画 顾名思义是一帧一帧的播放 。 实际在开发中为了节省内存美术会把人物的图片切成一小块一小块然后由程序根据编辑器生成的点把图片在拼接起来这样就可以做到用更少的图片去实现更多的动画 效果因为不太方便介绍图片编辑器 这个demo我只给大家简单的介绍一下播放动画的原理 后期我会深入讲解。
              如图所示这个小人一直在行走 实际上是4张图片在来回切换 每张图片延迟500毫秒 后播下一张 以此类推。



 


       

 

 

 


 

package cn.m15.xys;  

  

import android.app.Activity;  

import android.content.Context;  

import android.graphics.Bitmap;  

import android.graphics.BitmapFactory;  

import android.graphics.Canvas;  

import android.graphics.Color;  

import android.graphics.Paint;  

import android.os.Bundle;  

import android.view.View;  

  

public class FramAnimation extends Activity {  

    public final static int ANIM_COUNT = 4;  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

    setContentView(new FramView(this));  

    super.onCreate(savedInstanceState);  

  

    }  

  

    class FramView extends View {  

    Bitmap[] bitmap = new Bitmap[ANIM_COUNT];  

    Bitmap display = null;  

    Paint paint = null;  

    long startTime = 0;  

    int playID = 0;  

  

    public FramView(Context context) {  

        super(context);  

        for (int i = 0; i < ANIM_COUNT; i++) {  

        bitmap[i] = BitmapFactory.decodeResource(this.getResources(),  

            R.drawable.hero_a + i);  

        }  

        display = bitmap[0];  

        paint = new Paint();  

        startTime = System.currentTimeMillis();  

    }  

  

    @Override  

    protected void onDraw(Canvas canvas) {  

        super.onDraw(canvas);  

        paint.setColor(Color.WHITE);  

        canvas.drawText("播放动画中...", 100, 30, paint);  

        long nowTime = System.currentTimeMillis();  

        if (nowTime - startTime >= 500) {  

        startTime=nowTime;  

        playID++;  

        if (playID >= ANIM_COUNT) {  

            playID = 0;  

        }  

        canvas.drawBitmap(bitmap[playID], 100, 100, paint);  

        }  

        invalidate();  

    }  

    }  

  

}  



 





自定义DIALOG点击任意按钮不消失

使用反射:
在你的setPositiveButton中添加:
//用于不关闭对话框

try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false);
} catch (Exception e) {
e.printStackTrace();

添加上述代码后就可以使dialog无法关闭,在你需要关闭的地方,添加:
//关闭对话框

try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值