我是靠谱客的博主 大方小伙,这篇文章主要介绍非常好看的android音量旋钮,现在分享给大家,希望可以做个参考。

本文实例为大家分享了好看的android音量旋钮,供大家参考,具体内容如下

效果图:

实现思路,用的自定义的控件,图片和按钮都是自己绘制的,并且附带点击事件,可以监听当前的旋钮的值:

第一步:先把布局写了:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="#000000" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" /> <LinearLayout android:layout_width="300dp" android:layout_height="300dp" android:layout_marginBottom="10dp" android:orientation="horizontal"> <com.example.longshine.zname.AnalogController android:id="@+id/controllerBass" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="#000000" /> </LinearLayout> </LinearLayout>

第二步:然后把自定义的控件类写了:AnalogController

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Created by Harjot on 23-May-16. */ public class AnalogController extends View { static float width, height; float midx, midy; Paint textPaint; Paint circlePaint; public Paint circlePaint2; public Paint linePaint; String angle; float currdeg, deg = 3, downdeg, prevCurrDeg; boolean isIncreasing, isDecreasing; public static int themeColor = Color.parseColor("#B24242"); int progressColor, lineColor; onProgressChangedListener mListener; String label; public interface onProgressChangedListener { void onProgressChanged(int progress); } public void setOnProgressChangedListener(onProgressChangedListener listener) { mListener = listener; } public AnalogController(Context context) { super(context); init(); } public AnalogController(Context context, AttributeSet attrs) { super(context, attrs); init(); } public AnalogController(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } void init() { textPaint = new Paint(); textPaint.setColor(Color.WHITE); textPaint.setStyle(Paint.Style.FILL); textPaint.setTextSize(20); textPaint.setFakeBoldText(true); textPaint.setTextAlign(Paint.Align.CENTER); circlePaint = new Paint(); circlePaint.setColor(Color.parseColor("#222222")); circlePaint.setStyle(Paint.Style.FILL); circlePaint2 = new Paint(); circlePaint2.setColor(themeColor); // circlePaint2.setColor(Color.parseColor("#FFA036")); circlePaint2.setStyle(Paint.Style.FILL); linePaint = new Paint(); linePaint.setColor(themeColor); // linePaint.setColor(Color.parseColor("#FFA036")); linePaint.setStrokeWidth(7); angle = "0.0"; label = "Label"; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); midx = canvas.getWidth() / 2; midy = canvas.getHeight() / 2; int ang = 0; float x = 0, y = 0; int radius = (int) (Math.min(midx, midy) * ((float) 14.5 / 16)); float deg2 = Math.max(3, deg); float deg3 = Math.min(deg, 21); for (int i = (int) (deg2); i < 22; i++) { float tmp = (float) i / 24; x = midx + (float) (radius * Math.sin(2 * Math.PI * (1.0 - tmp))); y = midy + (float) (radius * Math.cos(2 * Math.PI * (1.0 - tmp))); circlePaint.setColor(Color.parseColor("#111111")); canvas.drawCircle(x, y, ((float) radius / 15), circlePaint); } for (int i = 3; i <= deg3; i++) { float tmp = (float) i / 24; x = midx + (float) (radius * Math.sin(2 * Math.PI * (1.0 - tmp))); y = midy + (float) (radius * Math.cos(2 * Math.PI * (1.0 - tmp))); canvas.drawCircle(x, y, ((float) radius / 15), circlePaint2); } float tmp2 = (float) deg / 24; float x1 = midx + (float) (radius * ((float) 2 / 5) * Math.sin(2 * Math.PI * (1.0 - tmp2))); float y1 = midy + (float) (radius * ((float) 2 / 5) * Math.cos(2 * Math.PI * (1.0 - tmp2))); float x2 = midx + (float) (radius * ((float) 3 / 5) * Math.sin(2 * Math.PI * (1.0 - tmp2))); float y2 = midy + (float) (radius * ((float) 3 / 5) * Math.cos(2 * Math.PI * (1.0 - tmp2))); circlePaint.setColor(Color.parseColor("#222222")); canvas.drawCircle(midx, midy, radius * ((float) 13 / 15), circlePaint); circlePaint.setColor(Color.parseColor("#000000")); canvas.drawCircle(midx, midy, radius * ((float) 11 / 15), circlePaint); canvas.drawText(label, midx, midy + (float) (radius * 1.1), textPaint); canvas.drawLine(x1, y1, x2, y2, linePaint); } @Override public boolean onTouchEvent(MotionEvent e) { mListener.onProgressChanged((int) (deg - 2)); if (e.getAction() == MotionEvent.ACTION_DOWN) { float dx = e.getX() - midx; float dy = e.getY() - midy; downdeg = (float) ((Math.atan2(dy, dx) * 180) / Math.PI); downdeg -= 90; if (downdeg < 0) { downdeg += 360; } downdeg = (float) Math.floor(downdeg / 15); return true; } if (e.getAction() == MotionEvent.ACTION_MOVE) { float dx = e.getX() - midx; float dy = e.getY() - midy; currdeg = (float) ((Math.atan2(dy, dx) * 180) / Math.PI); currdeg -= 90; if (currdeg < 0) { currdeg += 360; } currdeg = (float) Math.floor(currdeg / 15); if (currdeg == 0 && downdeg == 23) { deg++; if (deg > 21) { deg = 21; } downdeg = currdeg; } else if (currdeg == 23 && downdeg == 0) { deg--; if (deg < 3) { deg = 3; } downdeg = currdeg; } else { deg += (currdeg - downdeg); if (deg > 21) { deg = 21; } if (deg < 3) { deg = 3; } downdeg = currdeg; } angle = String.valueOf(String.valueOf(deg)); invalidate(); return true; } if (e.getAction() == MotionEvent.ACTION_UP) { return true; } return super.onTouchEvent(e); } public int getProgress() { return (int) (deg - 2); } public void setProgress(int x) { deg = x + 2; } public String getLabel() { return label; } public void setLabel(String txt) { label = txt; } public int getLineColor() { return lineColor; } public void setLineColor(int lineColor) { this.lineColor = lineColor; } public int getProgressColor() { return progressColor; } public void setProgressColor(int progressColor) { this.progressColor = progressColor; } }

第三步:在MainActivity中,我们去写监听方法,查看旋钮的值:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.widget.TextView; /** * Created by 16857 on 2019/4/12. */ public class TextActivity extends Activity { AnalogController bassController; public static int themeColor = Color.parseColor("#B24242"); private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bassController = (AnalogController) findViewById(R.id.controllerBass); tv = (TextView)findViewById(R.id.tv); bassController.setLabel("BASS"); bassController.circlePaint2.setColor(themeColor); bassController.linePaint.setColor(themeColor); bassController.invalidate(); bassController.linePaint.setColor(themeColor); bassController.setOnProgressChangedListener(new AnalogController.onProgressChangedListener() { @Override public void onProgressChanged(int progress) { tv.setText(progress+""); } }); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。

最后

以上就是大方小伙最近收集整理的关于非常好看的android音量旋钮的全部内容,更多相关非常好看内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(167)

评论列表共有 0 条评论

立即
投稿
返回
顶部