多个按钮左右相互挤压效果

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal" >
 6     <LinearLayout
 7         android:id="@+id/main_contain"
 8         android:layout_marginTop="50dp"
 9         android:layout_width="match_parent"
10         android:layout_height="50dp"
11         android:orientation="horizontal"
12         android:layout_centerInParent="true" >
13         <Button
14             android:id="@+id/btnOne"
15             android:layout_width="wrap_content"
16             android:layout_height="match_parent"
17             android:text="one" />
18         <Button
19             android:id="@+id/btnTwo"
20             android:layout_width="wrap_content"
21             android:layout_height="match_parent"
22             android:text="two" />
23         <Button
24             android:id="@+id/btnThree"
25             android:layout_width="wrap_content"
26             android:layout_height="match_parent"
27             android:text="three" />
28         <Button
29             android:id="@+id/btnFour"
30             android:layout_width="wrap_content"
31             android:layout_height="match_parent"
32             android:text="four" />
33     </LinearLayout>
34 </RelativeLayout>
  1 package com.example.xinxindemo;
  2
  3 import android.app.Activity;
  4 import android.os.Bundle;
  5 import android.os.Handler;
  6 import android.os.Message;
  7 import android.util.DisplayMetrics;
  8 import android.util.Log;
  9 import android.view.View;
 10 import android.view.ViewGroup.LayoutParams;
 11 import android.widget.Button;
 12 import android.widget.LinearLayout;
 13
 14 public class PinchActivity extends Activity implements View.OnClickListener {
 15
 16     private final static String TAG = "PinchActivity";
 18     // 屏幕宽度
 19     private int screentWidth = 0;
 21     // View可伸展最长的宽度
 22     private int maxWidth;
 24     // View可伸展最小宽度
 25     private int minWidth;
 27     // 当前点击的View
 28     private View currentView;
 30     // 显示最长的那个View
 31     private View preView;
 33     // 主布局ViewGroup
 34     private LinearLayout mainContain;
 36     // 标识符 动画是否结束
 37     private boolean animationIsEnd = true;
 39     // 变大操作
 40     private static final int OPE_BIG = 1;
 42     // 变小操作
 43     private static final int OPE_SMALL = 2;
 45     // 当前操作 -1表示无效操作
 46     private int currentOpe = -1;
 48     // 前进的步伐距离
 49     private static final int STEP = 10;
 50
 51     @Override
 52     protected void onCreate(Bundle savedInstanceState) {
 53         super.onCreate(savedInstanceState);
 55         setContentView(R.layout.activity_main);
 56
 57         initCommonData();
 58         initViewData();
 59         measureWidth(screentWidth);
 60     }
 61
 62     private void initViewData() {
 63         mainContain = (LinearLayout) this.findViewById(R.id.main_contain);
 64         View child;
 65         int childCount = mainContain.getChildCount();
 66         for (int i = 0; i < childCount; i++) {
 67             child = mainContain.getChildAt(i);
 68             child.setOnClickListener(this);
 69         }
 70     }
 71
 72     private void initCommonData() {
 73         DisplayMetrics metric = new DisplayMetrics();
 74         getWindowManager().getDefaultDisplay().getMetrics(metric);
 75         // 屏幕宽度(像素)
 76         screentWidth = metric.widthPixels;
 77     }
 78
 79     private void setCurrentViewParams() {
 80         if (currentView == null) {
 81             return;
 82         }
 83         LayoutParams params = currentView.getLayoutParams();
 84         if (params == null) {
 85             return;
 86         }
 87         int realWidth = params.width;
 88         int nextWidth = 0;
 89         if (currentOpe == OPE_BIG) {
 90             nextWidth = realWidth + STEP;
 91         } else if (currentOpe == OPE_SMALL) {
 92             nextWidth = realWidth - STEP;
 93         }
 94         if (nextWidth > maxWidth) {
 95             nextWidth = maxWidth;
 96         } else if (nextWidth < minWidth) {
 97             nextWidth = minWidth;
 98         }
 99         params.width = nextWidth;
100         currentView.setLayoutParams(params);
101         if (nextWidth == maxWidth || nextWidth == minWidth) {
102             animationIsEnd = true;
103             onOffClickable();
104             stopAnimation();
105             return;
106         }
107         mHandler.sendEmptyMessageDelayed(1, 20);
108     }
109
110     // 初始化宽度 测量max min 长度
111     private void measureWidth(int screenWidth) {
112         int halfWidth = screenWidth / 2;
113         maxWidth = halfWidth - 50;
114         minWidth = (screenWidth - maxWidth) / (mainContain.getChildCount() - 1);
115
116         View child;
117         int childCount = mainContain.getChildCount();
118         for (int i = 0; i < childCount; i++) {
119             child = mainContain.getChildAt(i);
120             LayoutParams params = child.getLayoutParams();
121             if (i == 0) {
122                 preView = child;
123                 params.width = maxWidth;
124             } else {
125                 params.width = minWidth;
126             }
127             child.setLayoutParams(params);
128         }
129     }
130
131     // 这里用handler更新界面
132     private Handler mHandler = new Handler() {
133         @Override
134         public void handleMessage(Message msg) {
135             if (msg.what == 1) {
136                 setCurrentViewParams();
137             }
138         }
139     };
140
141     // 停止动画
142     private void stopAnimation() {
143         currentOpe = -1;
144         currentView = null;
145     }
146
147     private void startAnimation() {
148         if (currentView == null || currentOpe == -1) {
149             Log.d(TAG, "无效动画");
150             return;
151         }
152         animationIsEnd = false;
153         onOffClickable();
154         mHandler.sendEmptyMessage(1);
155     }
156
157     @Override
158     public void onClick(View v) {
159         int id = v.getId();
160         switch (id) {
161         case R.id.btnOne:
162             currentView = mainContain.getChildAt(0);
163             break;
164         case R.id.btnTwo:
165             currentView = mainContain.getChildAt(1);
166             break;
167         case R.id.btnThree:
168             currentView = mainContain.getChildAt(2);
169             break;
170         case R.id.btnFour:
171             currentView = mainContain.getChildAt(3);
172             break;
173         }
174
175         Log.i(TAG, ((Button) currentView).getText().toString() + " click");
176
177         if (currentView != null && animationIsEnd) {
178             int currentViewWidth = currentView.getWidth();
179             if (currentViewWidth == maxWidth) {
180                 currentOpe = OPE_SMALL;
181             } else {
182                 currentOpe = OPE_BIG;
183             }
184             clickEvent(currentView);
185             startAnimation();
186         }
187
188     }
189
190     private void clickEvent(View view) {
191         View child;
192         int childCount = mainContain.getChildCount();
193         for (int i = 0; i < childCount; i++) {
194             child = mainContain.getChildAt(i);
195             if (preView == child) {
196                 LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) child
197                         .getLayoutParams();
198                 params.weight = 1.0f;
199                 child.setLayoutParams(params);
200             } else {
201                 LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) child
202                         .getLayoutParams();
203                 params.weight = 0.0f;
204                 params.width = minWidth;
205                 child.setLayoutParams(params);
206             }
207         }
208         preView = view;
209         printWeight();
210     }
211
212     private void printWeight() {
213         View child;
214         int childCount = mainContain.getChildCount();
215         for (int i = 0; i < childCount; i++) {
216             child = mainContain.getChildAt(i);
217             LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) child
218                     .getLayoutParams();
219             Log.i("mm1", ((Button) child).getText() + ": " + params.weight);
220         }
221     }
222
223     //
224     private void onOffClickable() {
225         View child;
226         boolean clickable = animationIsEnd;
227         int childCount = mainContain.getChildCount();
228         for (int i = 0; i < childCount; i++) {
229             child = mainContain.getChildAt(i);
230             child.setClickable(clickable);
231         }
232     }
233
234 }
时间: 2024-10-27 18:58:59

多个按钮左右相互挤压效果的相关文章

Android中ListView字母排序,实现字母挤压效果以及右侧快速选中字母,搜索关键字功能

Android中ListView字母排序,实现字母挤压效果以及右侧快速选中字母,搜索关键字功能 本文中阐述如何自定义EditText实现搜索框自定义的样式以及挤压字母的思路等 自定义EditText 相关的drawable文件 主界面以及相关的适配器 结果展示 定义要呈现的EditText的样式 public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher { /** * 定义删

CSS3实现了提交按钮等待打点循环效果

CSS3实现了提交按钮等待打点循环效果:本章节分享一段代码实例,它实现了提交按钮打点等待效果.这样的效果是比较人性化的,可以让用户很容易的指导,网页是在工作中,只需要耐心等待就可以.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.co

Android用悬浮按钮实现翻页效果

今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子. 首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams.那么在AndroidManifest.xml中添加权限: ? 1 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 然后,我们要对WindowManager,WindowManager.La

Android实现渐显按钮的左右滑动效果

本示例演示在Android中实现带渐显按钮的左右滑动效果. 关于滑动效果,在我的上一篇博文中提到过,有兴趣的朋友可以访问: http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html 如果大家想实现带指引效果的左右滑动,请访问博文:http://www.cnblogs.com/hanyonglu/archive/2012/04/07/2435589.html 先看下运行效果:    程序结构: MainActivity文件中代

分享按钮,移入移出效果

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分享按钮,移入移出效果</title> <style type="text/css"> *{ margin: 0; padding: 0; } #div1{ width: 200px; height: 200px; backg

jquery带按钮的图片切换效果

<!doctype html> <html> <head> <meta charset="gb2312"> <title>jquery带按钮的图片切换效果</title> <script type="text/javascript" src="jquery-1.8.0.js"></script> <style type="text/cs

AnimCheckBox按钮点击动画效果《IT蓝豹》

AnimCheckBox按钮点击动画效果 AnimCheckBox按钮点击动画效果,点击选中后勾选框选择效果,很不错的动画功能.项目来源:https://github.com/lguipeng/AnimCheckBox本项目主要介绍:本项目主要自定义AnimCheckBox 集成View,提供选择的监听接口OnCheckedChangeListener主要由drawCircle()方法和drawHook(Canvas canvas):  private void drawCircle(Canva

iOS 在tableView上添加button导致按钮没有点击效果和不能滑动的问题

[原]iOS 在tableView上添加button导致按钮没有点击效果和不能滑动的问题 2014-10-31阅读202 评论0 转载请注明出处. 今天在调试代码的时候,在tableviewcell上添加button,发现button快速点击的话,是看不出点击效果的,查找资料发现, ios7上UITableViewCell子层容器是UITableViewCellScrollView, ios6的则是UITableViewCellContentView.点击效果应该是被ScrollView的触摸延

CSS3按钮鼠标悬浮光圈效果

1 .HTML相关知识点  HTML(超文本标记语言)是网页的核心.首先你要学会,不要害怕,HTML很容易学习的,刚开始多记多练,但是到最后还是要自己深入专研,简单的入门是很快,但学好HTML是成为Web开发人员的基本条件. 学习资源: HTML Dog (http://htmldog.com/) HTML入门指南 (http://www.w3.org/MarkUp/Guide/) W3C HTML学习教程 (http://www.w3schools.com/html/) 2.CSS3相关知识点