android自定义button点击效果

简介: <ol class="dp-j" start="1"><li class="alt"><span><span class="keyword">package</span><span> com.min.androidtest;  </span></span></li><li><span>  </span></li><li class="alt"><span><span class="k
  1. package com.min.androidtest;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.graphics.Canvas;  
  6. import android.graphics.Color;  
  7. import android.graphics.Paint;  
  8. import android.graphics.Rect;  
  9. import android.os.Bundle;  
  10. import android.util.Log;  
  11. import android.view.View;  
  12. import android.view.ViewGroup.LayoutParams;  
  13. import android.widget.Button;  
  14. import android.widget.LinearLayout;  
  15.   
  16. public class AndroidTest extends Activity {  
  17.     private static final String TAG = "AndroidTest";  
  18.   
  19.     private static LinearLayout ll;  
  20.     private Button mBtn;  
  21.     private MyView mMyView;  
  22.     private boolean mbClickFlg = false;  
  23.       
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27. //        setContentView(R.layout.main);  
  28.           
  29.         // 设置画面布局  
  30.         ll = new LinearLayout(this.getBaseContext());  
  31.         ll.setOrientation(LinearLayout.VERTICAL);  
  32.   
  33.         // button  
  34.         mBtn = new Button(this.getBaseContext());  
  35.         mBtn.setText("Draw");  
  36.         //   
  37.         mBtn.setTextColor(0xff000000);  
  38.         mBtn.setTextSize(16);  
  39.         LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(  
  40.         LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  41.   
  42.         lp.topMargin = 5;  
  43.         lp.leftMargin = 5;  
  44.         ll.addView(mBtn, lp);  
  45.   
  46.         // 设置画图view  
  47.         LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(  
  48.                 LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
  49.         lp1.weight = 1;  
  50.         Rect rect = new Rect(10409066);  
  51.         mMyView = new MyView(this.getBaseContext(), rect);  
  52.         mMyView.setOnClickListener(new View.OnClickListener() {  
  53.   
  54.             public void onClick(View v) {  
  55.                 // TODO Auto-generated method stub  
  56.                 Log.d(TAG, "mMyView clicked.");  
  57.                 if (mbClickFlg) {  
  58.                     mMyView.setStrText("Click Me");  
  59.                 } else {  
  60.                     mMyView.setStrText("Again...");  
  61.                 }  
  62.                 mbClickFlg = !mbClickFlg;  
  63.                 mMyView.postInvalidate();  
  64.             }  
  65.               
  66.         });  
  67.           
  68.         ll.addView(mMyView, lp1);  
  69.         setContentView(ll);  
  70.   
  71.         // 设置监听按钮点击事件  
  72.         mBtn.setOnClickListener(new View.OnClickListener() {  
  73.   
  74.             public void onClick(View v) {  
  75.                 // TODO Auto-generated method stub  
  76.                 mMyView.drawLine();  
  77.                 mMyView.postInvalidate();  
  78.             }  
  79.               
  80.         });  
  81.   
  82.     }  
  83.   
  84.     // 自定义画图类,继承自View类  
  85.     public class MyView extends View {     
  86.         private Paint paint;  
  87.         private boolean bDrawLineFlg = false;  
  88.         private Rect mRect;  
  89.         private String mStrText = "having";  
  90.           
  91.         MyView(Context context) {     
  92.             super(context);     
  93.             // 生成paint   
  94.             paint = new Paint();    
  95.         }  
  96.           
  97.         MyView(Context context, Rect rect) {     
  98.             super(context);  
  99.             // 生成paint   
  100.             paint = new Paint();  
  101.             mRect = rect;  
  102.         }  
  103.              
  104.         @Override    
  105.         protected void onDraw(Canvas canvas) {     
  106.             // TODO Auto-generated method stub     
  107.             super.onDraw(canvas);     
  108.               
  109.             // 填充整个画布  
  110.             canvas.drawColor(Color.GRAY);  
  111. //            canvas.drawRGB(255, 255, 255); // 也可以  
  112.   
  113.               
  114.               
  115.             // 画图  
  116.            if (bDrawLineFlg) {  
  117.                 Log.d(TAG, "drawing");  
  118.                   
  119.                 // Draw top 6 lines  
  120.                 paint.setColor(0xFFFFC0CB);    
  121.                 canvas.drawLine(mRect.left + 2, mRect.top, mRect.right - 2, mRect.top, paint);  
  122.                 canvas.drawLine(mRect.left + 1, mRect.top + 1, mRect.right -1, mRect.top + 1, paint);  
  123.                 for (int i = 2; i < 6; i++) {  
  124.                     canvas.drawLine(mRect.left, mRect.top + i, mRect.right, mRect.top + i, paint);  
  125.                 }  
  126.                   
  127.                 // Draw middle 14 lines  
  128.                 paint.setColor(0xFFFFB6C1);  
  129.                 for (int i = 6; i < 20; i++) {  
  130.                     canvas.drawLine(mRect.left, mRect.top + i, mRect.right, mRect.top + i, paint);  
  131.                 }  
  132.                   
  133.                 // Draw bottom 6 lines  
  134.                 paint.setColor(0xFFFFC0CB);  
  135.                 for (int i = 20; i < 24; i++) {  
  136.                     canvas.drawLine(mRect.left, mRect.top + i, mRect.right, mRect.top + i, paint);  
  137.                 }                 
  138.                 canvas.drawLine(mRect.left + 1, mRect.top + 24, mRect.right - 1, mRect.top + 24, paint);  
  139.                 canvas.drawLine(mRect.left + 2, mRect.top + 25, mRect.right - 2, mRect.top + 25, paint);  
  140.                   
  141.                 // draw text  
  142.                 paint.setColor(0xFF0000FF);  
  143.                 paint.setTextSize(16);  
  144.                 paint.setAntiAlias(true); // 消除锯齿  
  145.                 paint.setFlags(Paint.ANTI_ALIAS_FLAG); // 消除锯齿  
  146.                 try{  
  147.                     float widths[] = new float[mStrText.length()];  
  148.                     paint.getTextWidths(mStrText, widths);  
  149.                     float textWidth = 0.0f;  
  150.                     for(int i = 0; i < widths.length; i++) {  
  151.                         textWidth += widths[i];  
  152.                         Log.d(TAG, "widths[0] = " + widths[i]);  
  153.                     }  
  154.                     Log.d(TAG, "textWidth = " + textWidth);  
  155.                     float textSize = paint.getTextSize();  
  156.                     Log.d(TAG, "textSize = " + textSize);  
  157.                     canvas.drawText(mStrText,  
  158.                             mRect.left + (mRect.width() - textWidth) / 2,  
  159.                             mRect.bottom - (mRect.height() - textSize) / 2 - 3// add offset to y position  
  160.                             paint);  
  161.                 } catch(Exception e) {  
  162.                     e.printStackTrace();  
  163.                 }  
  164.            }  
  165.                  
  166.         }  
  167.           
  168.         public void drawLine() {  
  169.             // 设置画线标志  
  170.             bDrawLineFlg = !bDrawLineFlg;  
  171.             if (bDrawLineFlg) {  
  172.                 mBtn.setText("Hide");  
  173.             } else {  
  174.                 mBtn.setText("Draw");  
  175.             }  
  176.             Log.d(TAG, "to be draw");  
  177.         }  
  178.           
  179.         public void setStrText(String text) {  
  180.             mStrText = text;  
  181.         }  
  182.     }  

目录
相关文章
|
4月前
|
Java Android开发
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
181 0
|
24天前
|
XML Java Android开发
Android每点击一次按钮就添加一条数据
Android每点击一次按钮就添加一条数据
24 1
|
3月前
|
Android开发
解决在Android Compose中点击空白处收回软键盘
解决在Android Compose中点击空白处收回软键盘
|
8月前
|
XML Android开发 数据格式
Android中利用shape属性自定义设置Button按钮
Android中利用shape属性自定义设置Button按钮
137 0
|
4月前
|
XML Java Android开发
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
62 0
|
Android开发
Android button 点击跳转页面
Android button 点击跳转页面
Android button 点击跳转页面
|
Android开发
Android 7.1 PackageInstaller(应用安装器)增加自动点击安装
Android 7.1 PackageInstaller(应用安装器)增加自动点击安装
351 0
|
8月前
|
Android开发
Android 实现点击输入框以外的区域隐藏软键盘
Android 实现点击输入框以外的区域隐藏软键盘
95 0
|
10月前
|
XML JavaScript Java
Android实现加载富文本以及SpannableString、SpannableStringBuilder实现部分文字可以点击,更换颜色
Android实现加载富文本以及SpannableString、SpannableStringBuilder实现部分文字可以点击,更换颜色
|
10月前
|
Java Android开发
Launcher点击图标启动App流程分析(基于Android N)2
Launcher点击图标启动App流程分析(基于Android N)2
104 0