這篇文章將為大家詳細(xì)講解有關(guān)如何實(shí)現(xiàn)android音量旋鈕,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、韶關(guān)網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、韶關(guān)網(wǎng)絡(luò)營(yíng)銷、韶關(guān)企業(yè)策劃、韶關(guān)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供韶關(guān)建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:m.rwnh.cn
效果圖:
實(shí)現(xiàn)思路,用的自定義的控件,圖片和按鈕都是自己繪制的,并且附帶點(diǎn)擊事件,可以監(jiān)聽(tīng)當(dāng)前的旋鈕的值:
第一步:先把布局寫了:
<?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
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中,我們?nèi)懕O(jiān)聽(tīng)方法,查看旋鈕的值:
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+""); } }); } }
關(guān)于“如何實(shí)現(xiàn)android音量旋鈕”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
名稱欄目:如何實(shí)現(xiàn)android音量旋鈕
路徑分享:http://m.rwnh.cn/article4/jejhie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、定制網(wǎng)站、Google、建站公司、電子商務(wù)、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)