Android 프로 그래 밍 은 미끄럼 스위치 구성 요소 기능 을 실현 합 니 다[원본 다운로드 첨부]
Android 는 미끄럼 스위치 와 같은 구성 요 소 를 제공 하지 않 기 때문에 사용자 정의 보기 구성 요 소 를 실현 하여 미끄럼 스위치 효 과 를 실현 해 야 합 니 다.
여기 에는 세 가지 종류의 예시 코드 가 있 는데 그것 이 바로 스위치 구성 요소 보기,상태 감청 인터페이스,MainActivity 이다.
데모 의 효과 도 를 살 펴 보 겠 습 니 다.
먼저 보기 구성 요소 의 전체 코드 를 살 펴 보 겠 습 니 다.코드 가 설명 되 어 있 습 니 다.
package com.bear.swtichbuttondemo;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
/**
*
*/
public class MySwitchButton extends View implements OnTouchListener {
private Bitmap switchOnBkg; //
private Bitmap switchOffBkg; //
private Bitmap slipSwitchButton; //
private boolean isSlipping = false; //
private boolean isSwitchOn = false; // ,true ,flase
private float previousX; // x
private float currentX; // X
private ArrayList<OnSwitchListener> onSwitchListenerList; //
public MySwitchButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
this.setOnTouchListener(this); //
onSwitchListenerList = new ArrayList<OnSwitchListener>();
}
public void setImageResource(int switchBkg, int slipBtn) {
switchOnBkg = BitmapFactory.decodeResource(this.getResources(),
switchBkg);
switchOffBkg = BitmapFactory.decodeResource(this.getResources(),
switchBkg);
slipSwitchButton = BitmapFactory.decodeResource(this.getResources(),
slipBtn);
}
public void setSwitchState(boolean switchState) {
this.isSwitchOn = switchState;
this.invalidate();
}
public boolean getSwitchState() {
return this.isSwitchOn;
}
public void setOnSwitchStateListener(OnSwitchListener listener){
onSwitchListenerList.add(listener);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = new Matrix();
Paint paint = new Paint();
float leftSlipBtnX; //
//
canvas.drawBitmap(switchOnBkg, matrix, paint);
if (isSlipping) {
//
if (currentX > switchOnBkg.getWidth()) {
leftSlipBtnX = switchOnBkg.getWidth()
- slipSwitchButton.getWidth();
} else {
leftSlipBtnX = currentX - slipSwitchButton.getWidth();
}
} else {
//
if (isSwitchOn) {
leftSlipBtnX = switchOnBkg.getWidth()
- slipSwitchButton.getWidth();
} else {
leftSlipBtnX = 0;
}
}
// ,
if (leftSlipBtnX < 0) {
leftSlipBtnX = 0;
} else if (leftSlipBtnX > switchOnBkg.getWidth()
- slipSwitchButton.getWidth()) {
leftSlipBtnX = switchOnBkg.getWidth() - slipSwitchButton.getWidth();
}
//
canvas.drawBitmap(slipSwitchButton, leftSlipBtnX, 0, paint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(switchOnBkg.getWidth(), switchOnBkg.getHeight());
}
@Override
public boolean onTouch(View v, MotionEvent event) {
//
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE:
//
currentX = event.getX();
break;
case MotionEvent.ACTION_DOWN:
//
isSlipping = true;
break;
case MotionEvent.ACTION_UP:
//
isSlipping = false;
boolean previousState = isSwitchOn;
if (event.getX() > (switchOnBkg.getWidth() / 2)) {
isSwitchOn = true;
} else {
isSwitchOn = false;
}
// ,
if(previousState != isSwitchOn){
if(onSwitchListenerList.size() > 0){
for(OnSwitchListener listener : onSwitchListenerList){
listener.onSwitched(isSwitchOn);
}
}
}
break;
default:
break;
}
this.invalidate();
return true;
}
}
스위치 상태 감청 인터페이스 코드 를 다시 한번 살 펴 보 겠 습 니 다.다음 과 같 습 니 다.
package com.bear.swtichbuttondemo;
public interface OnSwitchListener {
public abstract void onSwitched(boolean isSwitchOn);
}
마지막 으로 저희 Activity 의 코드 입 니 다.사용자 정의 구성 요소 에 그림 두 장 을 보 내야 합 니 다.물론 자신 이 만 든 그림 두 장 을 보 낼 수도 있 습 니 다.코드 는 다음 과 같 습 니 다.
package com.bear.swtichbuttondemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private MySwitchButton mySwitchButton;
private Button myBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();
}
private void setupViews() {
mySwitchButton = (MySwitchButton) findViewById(R.id.my_switch_button);
//
mySwitchButton.setImageResource(R.drawable.switch_bkg_switch,
R.drawable.switch_btn_slip);
myBtn = (Button) findViewById(R.id.button);
//
mySwitchButton.setOnSwitchStateListener(new OnSwitchListener() {
@Override
public void onSwitched(boolean isSwitchOn) {
if (isSwitchOn) {
Toast.makeText(MainActivity.this, " ",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, " ",
Toast.LENGTH_SHORT).show();
}
}
});
myBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean isOn = mySwitchButton.getSwitchState();
mySwitchButton.setSwitchState(!isOn);
}
});
}
}
첨부:전체 인 스 턴 스 코드 는 여 기 를 클릭 하 십시오본 사이트 다운로드더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.