Android 사용자 정의 ImageView 두 장의 그림 전환 효 과 를 실현 합 니 다.

필 자 는 한 프로젝트 를 하 는 과정 에서 겪 은 작은 장애 때문에 이 ImageView 가 개발 수요 에 이 르 렀 다.
상황 수요>클릭 하여 그림 전환 실현
누가 말 할 지도 모 르 는데,이게 쉽 지 않 아?ImageView 에 클릭 이 벤트 를 설정 한 다음 에 다시 쓴 onClick(View v)방법 으로 정 의 된 특정한 flag 를 판단 하여 그림 을 전환 합 니 다.위조 코드 는 다음 과 같 습 니 다.

private boolean flag;
public void onClick(View v){
 if(flag){
 mImageView.setImageResource(R.drawable.xx1); 
 }else{
 mImageView.setImageResource(R.drawable.xx2);
 }
 flag = !flag;
}
필 자 는 위의 코드 까지 알 고 썼 는데 왜 ImageView 를 사용자 정의 해 야 합 니까?
구체 적 인 수요:두 ImageView 간 에 단일 선택 효 과 를 실현 합 니 다.
현재 두 이미지 뷰 는 위의 코드 를 통 해 괜 찮 을 것 같 습 니 다.서로 다른 사건 에서 서로 다른 판단 을 내 렸 으 면 좋 겠 습 니 다.하지만 이미지 뷰 가 증가 했다 면?
A:RadioGroup+RadioButton 쓰 는 거 몰라 요?
B:네!지금 해 볼 게 요.
……
B:안 돼 요.RadioButton 은 실현 할 수 있 지만 잘 어 울 리 지 않 아 요.저 는 RadioButton 에 Drawable 을 설정 해서 가운데 에 있 을 수 없고 RadioButton 의 크기 에 따라 바 꿀 수 없어 요.자원 이미지 가 크 면 크기 가 크 고 표시 구역 이 부족 하면 완전히 표시 할 수 없어 요.
A:…?,어,그래?그 렇 구나!그럼 ImageView 를 사용자 정의 해서 실현 합 시다!
B:왜 사용자 정의 ImageView 입 니까?사용자 정의 RadioButton 이 아니 라?
A:사용자 정의 RadioButton 은 ImageView 를 실현 하 는 src 속성 이 복잡 하고(이 블 로 그 를 보고 있 는 대신 이 실현 되 기 를 기다 리 고 있 습 니 다)사용자 정의 ImageView 는 단일 선택 속성 을 실현 하 는 것 이 좋 습 니 다.
B:그럼 어떻게 이 루어 졌어 요?
A:코드 를 보 세 요.코드 는 다음 과 같 습 니 다.
attrs.xml<사용자 정의 ImageView 에 두 개의 속성 추가>

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="SelectorImageView">
 <attr name="selector_src" format="reference"/>//   src    
 <attr name="checked" format="boolean"/>
</declare-styleable>
</resources>
Class-Selector ImageView<이러한 것 은 Checkable 인 터 페 이 스 를 실현 합 니 다.여 기 는 특별한 기능 이 없습니다.이 인터페이스 에 있 는 방법 을 이용 할 뿐 입 니 다.실현 되 지 않 아 도 저 희 는 직접 쓸 수 있 습 니 다>

public class SelectorImageView extends ImageView implements Checkable {
 private boolean isChecked;
 private Drawable mSelectorDrawable;
 private Drawable mDrawable;
 public SelectorImageView(Context context) {
 this(context, null);
 }
 public SelectorImageView(Context context, AttributeSet attrs) {
 this(context, attrs, 0);
 }
 public SelectorImageView(Context context, AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 /**      src Drawable        */
 mDrawable = getDrawable();
 final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SelectorImageView);
 /**       selector_src Drawable        */
 Drawable d = a.getDrawable(R.styleable.SelectorImageView_selector_src);
 mSelectorDrawable = d;
 /**       checked          */
 isChecked = a.getBoolean(R.styleable.SelectorImageView_checked, false);
 setChecked(isChecked);
 if (d != null && isChecked) {
 /**         selector_src checked = true,      ImageView    mSelectorDrawable */
  setImageDrawable(d);
 }
 a.recycle();
 }
 @Override
 public void setImageDrawable(Drawable drawable) {
 super.setImageDrawable(drawable);
 }
 @Override
 public void setChecked(boolean checked) {
 this.isChecked = checked;
 }
 @Override
 public boolean isChecked() {
 return isChecked;
 }
 @Override
 public void toggle() {
 /**                */
 if (isChecked()) {
  setImageDrawable(mSelectorDrawable);
 } else {
  setImageDrawable(mDrawable);
 }
 }
 public void toggle(boolean checked){
 /**           checked  ,       setChecked()           */
 setChecked(checked);
 toggle();
 }
}
layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <com.qjay.adf.widget.SelectorImageView
 android:id="@+id/iv"
 android:layout_width="100dp"
 android:layout_height="100dp"
 app:selector_src="@mipmap/checked"
 android:src="@mipmap/no_checked"/>
</LinearLayout>
Activity Code

public class MainActivity extends Activity {
 private SelectorImageView iv;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 iv = (SelectorImageView) findViewById(R.id.iv);
 iv.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  iv.toggle(!iv.isChecked());
  }
 });
 }
}
실현 효과

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기