麦兜小靓仔 麦兜小靓仔
关注数: 15 粉丝数: 63 发帖数: 2,498 关注贴吧数: 35
【独家发布】 状态栏消息、开关双面板可滑动制作教程 在系统状态栏里添加一些开关,便于用户操作一些常用的操作,比如开关Wifi,开关蓝牙,开关数据通信等,这些都是在设置里可以控制 的,但是用户要点击多次之后才能到达要去的区域,这个对用户体验不佳。所以在状态栏里添加些控制按钮很有必要,一般一个页面放3到5个开关布局比较好看,但是要是想放多个多个开关,则可以通过布局画或者用组件。        左右滑动可以使用ViewFlipper组件来实现视图之间的切换,然后添加手势控制类即可。   我为了方便修改项目,把控制面板的代码单独的提取出来,放到一个类里控制。 首先添加布局,在SystemUI的status_bar_expanded.xml里添加自定义的类。 <com.android.systemui.statusbar.SwitchControlPanel android:id="@+id/switch_control_panel" android:layout_height="wrap_content" android:layout_width="match_parent"/> 然后要去SystemUI的StatusBarService.java里初始化这个类,这样系统启动时候就会发现这个类,进而进行操作了。 SwitchControlPanel mPanel; mPanel = (SwitchControlPanel)expanded.findViewById(R.id.switch_control_panel); 然后就可以操作SwitchControlPanel.java这个类了,这个是继承于LinearyLayout,所以要在里面添加布局,需要用到inflate这个类,因为不是在Activity里使用,所以这里就与众不同点。 package com.android.systemui.statusbar; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.WifiManager; import android.util.AttributeSet; import android.util.Log; import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.GestureDetector.OnGestureListener; import android.view.View.OnTouchListener; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.view.animation.Animation.AnimationListener; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ViewFlipper; import android.widget.AdapterView.OnItemClickListener; import com.android.systemui.R; public class SwitchControlPanel extends LinearLayout implements OnItemClickListener, OnGestureListener, OnTouchListener,AnimationListener { private ViewFlipper mFlipper; GestureDetector mGestureDetector; private int mCurrentLayoutState; private static final int FLING_MIN_DISTANCE = 100; private static final int FLING_MIN_VELOCITY = 200; TextView wifiView; LinearLayout wifiLayout; private WifiManager mWifiManager; private IntentFilter mWifiStateFilter; public SwitchControlPanel(Context context) { super(context); } public SwitchControlPanel(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater inflater = LayoutInflater.from(context); inflater.inflate(R.layout.switch_control_panel, this); Log.e("kingfly", "kingfly SwitchControlPanel enter"); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); } @Override protected void onFinishInflate() { super.onFinishInflate(); mFlipper=(ViewFlipper)findViewById(R.id.flipper); mGestureDetector=new GestureDetector(this); wifiLayout=(LinearLayout)mFlipper.findViewById(R.id.switch_wifi); wifiView=(TextView)mFlipper.findViewById(R.id.switch_text_wifi); wifiLayout.setOnClickListener(mChangeWifi); wifiLayout.setOnTouchListener(mOnTouch); wifiView.setOnTouchListener(mOnTouch); mWifiManager = (WifiManager) this.getContext().getSystemService(Context.WIFI_SERVICE); handleWifiStateChanged(mWifiManager.getWifiState()); mWifiStateFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); this.getContext().registerReceiver(mWifiReceiver, mWifiStateFilter); mGestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override
首页 1 2 3 4 下一页