本文實例為大家分享了Android實現按鈕滾動選擇效果的具體代碼,供大家參考,具體內容如下
效果圖

代碼實現
package com.demo.ui.view;import android.annotation.TargetApi;import android.content.Context;import android.os.Build;import android.os.Handler;import android.support.v4.content.ContextCompat;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import com.demo.R;import com.demo.factory.Axis;import com.demo.utils.LogUtils;import java.util.ArrayList;import java.util.List;public class AirTemperatureView extends RelativeLayout{ private Context context; private TextView tv; private TextView tv_middle; // private TextView tv_middle_small; private RelativeLayout Auto_layout; private StringScrollPicker stringScrollPicker; private List<CharSequence> newList; private ImageView img; private ImageView img_left; private ImageView img_right; private int mPosition; private Handler handler = new Handler(); /** * 延遲線程,看是否還有下一個字符輸入 */ private Runnable delayRun = new Runnable() { @Override public void run() { stringScrollPicker.setVisibility(INVISIBLE); img.setBackgroundResource(R.drawable.air_temp_bg); tv_middle.setText(newList.get(mPosition)); //tv.setText("電池剩余"+newList.get(mPosition)+"%提醒你"); tv_middle.setVisibility(VISIBLE); img_right.setVisibility(VISIBLE); img_left.setVisibility(VISIBLE); if(mListener != null) { mListener.setAirTemper(mPosition+18); } LogUtils.e("空調刷新===","溫度"); } }; public AirTemperatureView(Context context){ super(context); this.context = context; init(); } @TargetApi(Build.VERSION_CODES.M) public void init(){ super.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, Axis.scaleX(230))); LinearLayout parent = new LinearLayout(context); parent.setOrientation(LinearLayout.VERTICAL); LayoutParams parent_Params = new LayoutParams(LayoutParams.MATCH_PARENT, Axis.scaleX(230)); super.addView(parent,parent_Params); RelativeLayout tv_layout = new RelativeLayout(context); LinearLayout.LayoutParams tv_layout_Params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, Axis.scaleX(50)); parent.addView(tv_layout,tv_layout_Params); tv = new TextView(context); tv.setText("溫度"); tv.setTextSize(Axis.scaleTextSize(36)); tv.setTextColor(ContextCompat.getColor(context, R.color.white_70_color));// LayoutParams tv_Params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); tv_Params.addRule(RelativeLayout.CENTER_IN_PARENT); tv_layout.addView(tv,tv_Params); /** * 滑動選擇器 */ Auto_layout = new RelativeLayout(context); LinearLayout.LayoutParams Auto_layout_Params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, Axis.scaleX(150)); Auto_layout_Params.setMargins(0,Axis.scaleX(30),0,0); parent.addView(Auto_layout,Auto_layout_Params); img = new ImageView(context); img.setId(R.id.EleRemindImage); img.setBackgroundResource(R.drawable.air_temp_bg); LayoutParams img_Params = new LayoutParams(Axis.scaleX(150), Axis.scaleX(150)); img_Params.addRule(RelativeLayout.CENTER_IN_PARENT); Auto_layout.addView(img,img_Params); img_left = new ImageView(context); img_left.setBackgroundResource(R.drawable.battery_point); LayoutParams img_left_Params = new LayoutParams(Axis.scaleX(14), Axis.scaleX(14)); img_left_Params.addRule(RelativeLayout.CENTER_VERTICAL); img_left_Params.addRule(RelativeLayout.LEFT_OF,R.id.EleRemindImage); img_left_Params.setMargins(0,0,Axis.scaleX(134),0); Auto_layout.addView(img_left,img_left_Params); img_right = new ImageView(context); img_right.setBackgroundResource(R.drawable.battery_point); LayoutParams img_right_Params = new LayoutParams(Axis.scaleX(14), Axis.scaleX(14)); img_right_Params.addRule(RelativeLayout.CENTER_VERTICAL); img_right_Params.addRule(RelativeLayout.RIGHT_OF,R.id.EleRemindImage); img_right_Params.setMargins(Axis.scaleX(134),0,0,0); Auto_layout.addView(img_right,img_right_Params); tv_middle = new TextView(context); tv_middle.setTextSize(Axis.scaleTextSize(64)); tv_middle.setGravity(Gravity.CENTER); tv_middle.setTextColor(0xFFFFFFFF); LayoutParams tv_middle_Params = new LayoutParams(Axis.scaleX(150), Axis.scaleX(150)); tv_middle_Params.addRule(RelativeLayout.CENTER_IN_PARENT); Auto_layout.addView(tv_middle,tv_middle_Params); newList = new ArrayList<>(); newList.add("18"); newList.add("19"); newList.add("20"); newList.add("21"); newList.add("22"); newList.add("23"); newList.add("24"); newList.add("25"); newList.add("26"); newList.add("27"); newList.add("28"); newList.add("29"); newList.add("30"); newList.add("31"); newList.add("32"); tv_middle.setText(newList.get(0)); stringScrollPicker = new StringScrollPicker(context); stringScrollPicker.setHorizontal(true); stringScrollPicker.setVisibleItemCount(5);//可見5個 第3個 (3-1)個位中間 stringScrollPicker.setCenterPosition(2); stringScrollPicker.setIsCirculation(true); stringScrollPicker.setCanTap(true); stringScrollPicker.setDisallowInterceptTouch(true); LayoutParams stringScrollPicker_Params = new LayoutParams(LayoutParams.MATCH_PARENT,Axis.scaleX(150)); Auto_layout.addView(stringScrollPicker,stringScrollPicker_Params); stringScrollPicker.setData(newList); stringScrollPicker.setOnSelectedListener(new ScrollPickerView.OnSelectedListener() { @Override public void onSelected(ScrollPickerView scrollPickerView, final int position) { mPosition = position; handler.postDelayed(delayRun, 1500); } }); stringScrollPicker.setOnSelectedListener(new StringScrollPicker.OnDataSelectedListener() { @Override public void DataSelected(CharSequence data) { //tv.setText("電池剩余"+data+"%提醒你"); } }); stringScrollPicker.setSelectedPosition(0,false);//中間Item位置 stringScrollPicker.setVisibility(INVISIBLE); stringScrollPicker.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: img.setBackgroundResource(R.drawable.battery_btn_p); if(delayRun!=null){ handler.removeCallbacks(delayRun); } break; } return false; } }); img.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stringScrollPicker.setVisibility(VISIBLE); tv_middle.setVisibility(INVISIBLE); img_right.setVisibility(INVISIBLE); img_left.setVisibility(INVISIBLE); img.setBackgroundResource(R.drawable.battery_btn_p); } }); } /** * 風速設置 * @param mPosition */ public void setAirTemperature(int mPosition){ /** * 在設置的時候不刷新 */ if(stringScrollPicker.getVisibility() == INVISIBLE){ if(mPosition > 32){ mPosition = 32; } stringScrollPicker.setSelectedPosition(mPosition-18,false); tv_middle.setText(newList.get(mPosition-18)); } } public TemperatureListener mListener; public void setOnTemperatureListener (TemperatureListener listener) { mListener = listener; } public interface TemperatureListener { void setAirTemper(int temperature); }}StringScrollPicker 類
package com.demo.ui.view;import android.annotation.TargetApi;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Build;import android.support.annotation.RequiresApi;import android.text.Layout;import android.text.StaticLayout;import android.text.TextPaint;import android.util.AttributeSet;import android.util.Log;import com.demo.factory.Axis;import com.demo.utils.ColorUtil;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class StringScrollPicker extends ScrollPickerView<CharSequence> { private int mMeasureWidth; private int mMeasureHeight; private TextPaint mPaint; // private int mMinTextSize = Axis.scaleX(64); // 最小的字體 private int mMaxTextSize = Axis.scaleX(64); // 最大的字體 // 字體漸變顏色 private int mStartColor = Color.WHITE; // 中間選中item的顏色 private int mEndColor = Color.GRAY; // 上下兩邊的顏色 private int mMaxLineWidth = -1; // 最大的行寬,默認為itemWidth.超過后文字自動換行 private Layout.Alignment mAlignment = Layout.Alignment.ALIGN_CENTER; // 對齊方式,默認居中 @TargetApi(Build.VERSION_CODES.CUPCAKE) public StringScrollPicker(Context context) { this(context, null); } @RequiresApi(api = Build.VERSION_CODES.CUPCAKE) public StringScrollPicker(Context context, AttributeSet attrs) { this(context, attrs, 0); } @RequiresApi(api = Build.VERSION_CODES.CUPCAKE) public StringScrollPicker(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.BLACK); setData(new ArrayList<CharSequence>(Arrays.asList(new String[]{ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve" }))); } /** * @param startColor 正中間的顏色 * @param endColor 上下兩邊的顏色 */ public void setColor(int startColor, int endColor) { mStartColor = startColor; mEndColor = endColor; invalidate(); } /** * item文字大小 * * @param minText
主站蜘蛛池模板:
拉孜县|
遂平县|
吴川市|
巴青县|
青铜峡市|
都江堰市|
贵定县|
云阳县|
周宁县|
信丰县|
松桃|
北海市|
盱眙县|
水富县|
本溪市|
扎囊县|
黑水县|
古田县|
赣州市|
溆浦县|
天等县|
宜川县|
琼结县|
六安市|
龙游县|
太仆寺旗|
姜堰市|
房山区|
得荣县|
黔西|
清水河县|
宁强县|
吉木萨尔县|
永泰县|
广安市|
乌兰察布市|
电白县|
乐陵市|
广丰县|
长春市|
汕尾市|