Android studio實(shí)現(xiàn)滑動(dòng)開(kāi)關(guān)
大家好,今天剛學(xué)會(huì)使用Android Studio實(shí)現(xiàn)滑動(dòng)開(kāi)關(guān)的效果,自己感覺(jué)還可以,和大家分享一下,如果覺(jué)得可以的可以拿去,然后再給我點(diǎn)個(gè)贊,謝謝。本人也是學(xué)Android studiok開(kāi)發(fā)不久,是個(gè)菜鳥(niǎo),各位大佬覺(jué)得有不好的地方,可以討論一下,共同學(xué)習(xí),一起進(jìn)步。
實(shí)現(xiàn)效果


下面是代碼,代碼寫(xiě)的比較粗糙,注釋沒(méi)有寫(xiě)的很好,需要用的可以自己移植一下
package com.example.biansheng2;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.Nullable;
/**
* 用于選擇手動(dòng)模式還是路線規(guī)劃模式
*/
public class ModelSelectView extends View {
Paint backPaint = new Paint();//背景畫(huà)筆
Paint facePaint = new Paint();//表面視圖畫(huà)筆
Paint colorPaint1 = new Paint();//繪制紅色和藍(lán)色
Paint colorPaint2 = new Paint();//繪制橙色
Paint colorPaint3 = new Paint();//繪制灰色
Paint handFont = new Paint();//手動(dòng)控制模式字體
Paint routeFont = new Paint();//路線規(guī)劃模式字體
boolean modelFlag = false;//false表示為手動(dòng)控制模式,true表示為路線規(guī)劃模式
RectF mRectF1 = new RectF(150, 840, 580, 960);
int x = 150, y = 900;//得到手指再控件上移動(dòng)的坐標(biāo)
public ModelSelectView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paintInit();
canvas.drawRect(mRectF1, backPaint);
canvas.drawCircle(150, 900, 60, backPaint);
canvas.drawCircle(580, 900, 60, backPaint);
if (!modelFlag){
canvas.drawCircle(150, 900, 60, facePaint);
canvas.drawRect(150,840,x,960,facePaint);
//設(shè)置手動(dòng)控制字體可見(jiàn)
handFont.setAlpha(255);
//設(shè)置路線規(guī)劃字體不可見(jiàn)
routeFont.setAlpha(0);
}else {
canvas.drawCircle(580, 900, 60, facePaint);
canvas.drawRect(x,840,580,960,facePaint);
//設(shè)置手動(dòng)控制字體不可見(jiàn)
handFont.setAlpha(0);
//設(shè)置路線規(guī)劃字體可見(jiàn)
routeFont.setAlpha(255);
}
canvas.drawText("手動(dòng)控制",250,915,handFont);
canvas.drawText("路線規(guī)劃",250,915,routeFont);
canvas.drawCircle(x, y, 44, backPaint);
canvas.drawCircle(x, y, 40, colorPaint2);
canvas.drawCircle(x, y, 47, colorPaint3);
}
private void paintInit() {
if (!modelFlag) {
backPaint.setAntiAlias(true);
backPaint.setColor(Color.parseColor("#ff00b5eb"));
facePaint.setColor(Color.parseColor("#D81B60"));
facePaint.setAntiAlias(true);
}else {
backPaint.setAntiAlias(true);
backPaint.setColor(Color.parseColor("#D81B60"));
facePaint.setColor(Color.parseColor("#ff00b5eb"));
facePaint.setAntiAlias(true);
}
colorPaint2.setAntiAlias(true);
colorPaint2.setColor(Color.parseColor("#FF6407"));
colorPaint1.setAntiAlias(true);
colorPaint1.setColor(Color.BLUE);
colorPaint3.setColor(Color.WHITE);
colorPaint3.setAntiAlias(true);
colorPaint3.setStyle(Paint.Style.STROKE);
colorPaint3.setStrokeWidth(5);
Typeface font = Typeface.create(Typeface.DEFAULT_BOLD,Typeface.BOLD_ITALIC);
handFont.setTypeface(font);
handFont.setColor(Color.WHITE);
handFont.setAntiAlias(true);
handFont.setTextSize(50);
routeFont.setTypeface(font);
routeFont.setColor(Color.WHITE);
routeFont.setAntiAlias(true);
routeFont.setTextSize(50);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int getX = (int) event.getX();
int getY = (int) event.getY();
//判斷得到的坐標(biāo)是否在視圖范圍之內(nèi)
if (getX >= 150 && getX <= 580 && getY >= 840 && getY <= 960) {
x = getX;
y = 900;
}
break;
case MotionEvent.ACTION_UP:
int getX1 = (int) event.getX();
int getY1 = (int) event.getY();
//判斷是否在控件內(nèi)
if (getY1 >= 810 && getY1 <= 990) {
if (getX1 <= 280) {
x = 150;
modelFlag = false;
} else if (getX1 >= 443) {
x = 580;
modelFlag = true;
} else {
if (!modelFlag) {
x = 150;
modelFlag = false;
} else {
x = 580;
modelFlag = true;
}
}
}
break;
}
invalidate();//刷新界面
return true;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Compose?動(dòng)畫(huà)藝術(shù)探索之可見(jiàn)性動(dòng)畫(huà)示例詳解
這篇文章主要為大家介紹了Compose?動(dòng)畫(huà)藝術(shù)探索之可見(jiàn)性動(dòng)畫(huà)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Android網(wǎng)絡(luò)監(jiān)聽(tīng)和網(wǎng)絡(luò)判斷示例介紹
大家好,本篇文章主要講的是Android網(wǎng)絡(luò)監(jiān)聽(tīng)和網(wǎng)絡(luò)判斷示例介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Android利用ViewDragHelper輕松實(shí)現(xiàn)拼圖游戲的示例
本篇文章主要介紹了Android利用ViewDragHelper輕松實(shí)現(xiàn)拼圖游戲的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-11-11
Flutter質(zhì)感設(shè)計(jì)之進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Flutter質(zhì)感設(shè)計(jì)之進(jìn)度條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Android Universal ImageLoader 緩存圖片
Universal Image Loader for Android的目的是為了實(shí)現(xiàn)異步的網(wǎng)絡(luò)圖片加載、緩存及顯示,支持多線程異步加載,通過(guò)本文給大家介紹Android Universal ImageLoader緩存圖片相關(guān)資料,涉及到imageloader緩存圖片相關(guān)知識(shí),對(duì)imageloader緩存圖片相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)2016-01-01
Kotlin入門(mén)教程之開(kāi)發(fā)環(huán)境搭建
最近kotlin大熱,Kotlin作為 Android 領(lǐng)域的 Swift,絕對(duì)讓你如沐春風(fēng),下面這篇文章主要給大家介紹了關(guān)于Kotlin入門(mén)教程之開(kāi)發(fā)環(huán)境搭建的相關(guān)資料,文中將實(shí)現(xiàn)的方法一步步介紹的非常詳細(xì),需要的朋友可以參考下。2017-10-10
Flutter pageview切換指示器的實(shí)現(xiàn)代碼
Android自定義view實(shí)現(xiàn)仿抖音點(diǎn)贊效果

