Butang (butang) dan Butang Imej (butang imej)


Pengenalan kepada bahagian ini:

Hari ini saya akan memperkenalkan kepada anda dua kawalan butang dalam kawalan asas Android, Butang butang biasa dan butang imej Butang Imej; Sebenarnya, penggunaan ImageButton dan Button pada asasnya serupa Bagi imej yang berkaitan dengannya, ia adalah sama seperti ImageView kemudian, jadi bahagian ini Hanya Butang akan diterangkan Selain itu, Button ialah subkelas TextView, jadi banyak sifat pada TextView juga boleh digunakan pada Button. unggul! Dalam perkembangan sebenar kami, Button tidak lebih daripada melakukan operasi yang sepadan pada beberapa keadaan butang, seperti: apabila butang ditekan Gunakan satu warna, timbulkan warna lain atau satu warna seperti ini apabila butang tidak tersedia! Pelaksanaan di atas tidak lebih daripada melalui sumber Drawable StateListDrawable, iaitu, menulis fail sumber boleh lukis, itu sahaja, Mulakan bahagian ini secara terus~


1 Pengenalan kepada StateListDrawable:

StateListDrawable ialah sejenis sumber Drawable yang boleh menetapkan gambar berbeza mengikut keadaan berbeza , nod kunci < selecotr >, kita hanya perlu menetapkan atribut tempat hitam Button kepada sumber boleh lukis untuk mencapainya dengan mudah, tekan Butang dengan warna atau latar belakang butang yang berbeza!

Atribut yang boleh kita tetapkan:

  • drawable: bitmap Drawable yang dirujuk, kita boleh meletakkannya di hadapan menunjukkan keadaan biasa komponen~

  • keadaan_fokus: sama ada untuk mendapatkan fokus

  • keadaan_tetingkap_fokus : Sama ada untuk mendapatkan fokus tetingkap

  • keadaan_didayakan: Sama ada kawalan tersedia

  • keadaan_boleh diperiksa : Sama ada kawalan boleh disemak, cth: kotak semak

  • state_checked: sama ada kawalan boleh disemak

  • < . >

    state_active
  • : Sama ada kawalan aktif, cth: slidingTab
  • state_single
  • : Apabila kawalan mengandungi berbilang sub -kawalan, tentukan sama ada untuk memaparkan hanya satu Kawalan kanak-kanak
  • state_first
  • : Apabila kawalan mengandungi berbilang kawalan kanak-kanak, tentukan sama ada kawalan anak pertama berada dalam keadaan yang dipaparkan
  • state_middle
  • : Apabila kawalan mengandungi berbilang sub-kawalan, tentukan sama ada sub-kawalan tengah berada dalam keadaan yang dipaparkan
  • state_last
  • : Kawalan mengandungi berbilang sub-kawalan Apabila, tentukan sama ada sub-kawalan terakhir berada dalam keadaan yang dipaparkan
  • 2. Untuk mencapai kesan menekan butang:
  • Baiklah, sediakan tiga langkah dahulu Latar belakang gambar Secara amnya, untuk mengelakkan butang diregangkan dan cacat, kami akan menggunakan .9.png sebagai boleh dilukis. butang! Mari kita lihat pemaparan operasi dahulu:


Pelaksanaan kod:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/ android">
    <item android:state_pressed="true" android:drawable="@drawable/ic_course_bg_fen"/>
    <item android:state_enabled="false" @android:drawable=" /ic_course_bg_pressed"/>
    <item android:drawable="@drawable/ic_course_bg_cheng"/>
</selector>

喎. xml

<Butang
          android="@+id/btnOne"
        android:layout_width="match_parent"
  android : 
        android:background="../style/images/btn_bg1"
        android:text="按钮"/>
    
    
        android:text="按钮"/>
    
    
     
;     ton&      @+id/btnTwo"
        android:layout_width="match_parent"
         android:layout_height="64dp"
         android:text="按钮用;><💮不厜"<💮

MainActivity.java

kelas awam MainActivity melanjutkan Aktiviti {

    pribadi Button btnOne,btn One,btn <🎜  <🎜 <🎜 ;  🎜 >    dilindungi void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  B t  (R.layout.activity_main);
  B t  (R.layout.activity_main);
  B t (R. .id.btnOne);
         btnTwo = (Button) findViewById(R.id.btnTwo);
        btnTwo.setOnClickListener(new OnClickListener() {<🎜 @                                                                                                                                                                                       public void onClick(Lihat v) {
                 jika(btnTwo. getText().toString().equals("按钮不可用")){
                     btnOne.setEnabled(false);
                         set可用");
                }lain{
btnOne.setEnabled(true);
                     btnTwo.setText("按钮不可用");
                                                                                                                                               });
    }

}


3. Gunakan nilai warna untuk melukis butang bulat

Banyak kali kita tidak semestinya mempunyai artis, betul, atau kita tidak tahu bagaimana untuk Photoshop atau memusnahkan gambar, atau kita malas, saya tidak mahu membuat gambar sendiri, Pada masa ini, kita boleh menulis kod kita sendiri untuk digunakan sebagai latar belakang butang Ia boleh menjadi apa-apa warna yang kita mahu Seterusnya, kita akan menyesuaikan sudut bulat. Latar belakang butang~ Ini melibatkan satu lagi sumber boleh dilukis: ShapeDrawable Saya tidak akan menerangkan secara terperinci setiap satu akan diperkenalkan kemudian. boleh dilukis~ Selagi anda tahu cara menggunakannya di sini, ia hanya perlu mengubah suai sifat Latar Belakang EditText Hanya sumber boleh lukis disiarkan di sini.

Mari kita lihat pemaparan dahulu:

2.gif

bbuton_danger_rounded.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/ android">

    <item android:state_pressed="true"><shape>
            <solid android:color="@color/bbutton_danger_pressed" ;  /   stroke android:width="1dp" android:color="@color/bbutton_danger_edge" />
             <corners android:radius="@dimen/bbuton_rounded_corner_radius"/><🎜 &                               /item>
        
    
    <item android:state_enabled="false"><shape>
        <solid android:state_enabled="false"><shape>
        <solid        <solid < android:_button="/🎜> <stroke android:width="1dp" android:color="@color/bbutton_danger_disabled_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>  shape </item>
        

    <item><shape>
            <solid android:color="&                   android                                      ;stroke android:width ="1dp" android:color="@color/bbutton_danger_edge" />
             <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
    ;                ;                         🎜>    
        
</selector>

color.xml:


<?xml version="1.0" encoding="utf-8"?>
<sumber>
    <color name="bbutton_danger_pressed">#ffd2322d</color>
    <color name="bbutton_danger_edge">>&  gt;> < color name="bbutton_danger_disabled">#a5d9534f</color>
    <color name="bbutton_danger_disabled_edge">#a5d43f3a</color>
     < color name="bbutton_danger_disabled_edge">#a5d43f3a</color><🎜lt>   nama_warna 4f</ color>
    <color name="text_font_white">#FFFFFF</color>
</resources>



>

><🎜 dimens.xml:

<dimen name="bbuton_rounded_corner_radius">5dp</dimen>

4. Butang yang merealisasikan kesan gelombang air Reka Bentuk Bahan

Jika telefon Android anda adalah sistem 5.0 ke atas, saya percaya anda sudah biasa dengan kesan klik butang berikut:

Rendering pelaksanaan:

3.gif

Lebih cepat kesannya selepas ditekan, lambat pula kesannya selepas lama. menekan !

Logik pelaksanaan:

1 Kami mewarisi ImageButton, sudah tentu anda boleh menukarnya kepada Button atau View, di sini saya ingin meletakkan penyu di tengah sebelum mewarisi. Butang Imej

2 Mula-mula, cipta dua objek Cat (berus), satu untuk melukis warna latar belakang bawah, dan satu untuk melukis resapan riak

3 jejari meningkat sekali-sekala sehingga Sama dengan jejari maksimum, kemudian tetapkan semula keadaan!

PS: Inti umum Jika anda baru belajar, anda mungkin berasa tidak biasa dengan View tersuai. Kami akan membincangkannya nanti. Anda boleh melakukannya sendiri, komennya agak terperinci~

Kod pelaksanaan:

Butang Imej Tersuai: MyButton.java


pakej demo.com.jay.buttondemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.ImageButton;

/**
 * Dibuat oleh coder-pig pada 2015/7/16 0016.
 */
MyButton kelas awam memanjangkan ImageButton {


int akhir statik peribadi INVALIDATE_DURATION = 15; //Selang masa antara setiap muat semula
peribadi static int DIFFUSE_GAP = 10; //Penambahan jejari resapan
private static int TAP_TIMEOUT , viewHeight; //Control width and height
private int PointX, Point; Private Int Maxradio; // Jejari maksimum resapan
Private Int Shaderradio; // Jejari resapan

PRIVATE PAINT BOTTOTTONT, Colorpaint ;  Koordinat
private long time = 0; 🎜>

    public MyButton(Konteks konteks, AttributeSet attrs) {
        super(konteks, attrs);
        initPaint();
        TAP_TIMEOUT = (Konfigurasi <🎜 outs) 🎜>
    /*
    * 初始化画笔
    * */
    private void initPaint() {
        colorPaint =  new Paint =      Paint baru  Paint();
        colorPaint.setColor (getResources().getColor(R.color.reveal_color));
        bottomPaint.setColor(getResources().getColor(R.color.bottom_color));
    }


    @ Override
    public boolean onTouchEvent(MotionEvent event) {
        suis (event.getAction()) {
            kes MotionEvent. ACTION_DOWN >    down                             down                                                                 down = 0) downTime = SystemClock.elapsedRealtime();
                 eventX = (int) event.getX();
                eventY = (int) event.getY();
                                             🎜>                countMaxRadio();
                isPushButton = benar ;
                postInvalidateDelayed(INVALIDATE_DURATION);
                rehat;
           kes AC MotionEvent.         Kes AC Event.                                                                                                                   < _BATAL:
                 jika(SystemClock.elapsedRealtime() - downTime < TAP_TIMEOUT){
DIFFUSE_GAP = 30;
postInvalidate();
}else{
clearData();
}
break;
}
return super.onTouchEvent(event);
}


@Override
dilindungi void dispatchDraw(Kanvas kanvas) {
super.dispatchDraw(kanvas);
if(!isPushButton) return; belum Kembali ke
apabila ditekan //Lukis latar belakang bulatan meresap
canvas.clipRect(pointX, pointY, pointX + viewWidth, pointY + viewHeight);
canvas.drawCircle(eventX, eventY, shaderRadio, colorPaint );
canvas.restore( );
//Sehingga jejari sama dengan jejari maksimum
if(shaderRadio < maxRadio){
postInvalidateDelayed(INVALIDATE_DURATION,
pointX, pointY, pointX + viewWidth, pointY + viewHeight);
shaderRadio += DIFFUSE_GAP;
         }lain{
                                                                                                                                 * 计算最大半径的方法
        * */
    private void countMaxRadio() {
        jika (lihat                                                                                                                          (eventX < viewWidth / 2) {
                maxRadio = viewWidth - eventX;
            } lain {
                maxRadio = viewWidth / 2 + eventX;
                                                                                                             jika (eventY < viewHeight / 2) {
                maxRadio = viewHeight - eventY;
            } lain {
                maxRadio = viewHeight / 2 + eventY;
                                                                                🎜>

<RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
     <demo.com.jay.buttondemo.MyButton
         android myBtn"
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:src="@mipmap/ic_tur_icon>                                                                                                                                       ... bottom_bg"
        android:scaleType="center"/>

</RelativeLayout>

    /*
*重置 数据 的 方法
**/
void swasta clearData () { downtime = 0; shaderRadio = 0;
        postInvalidate();
    }

    @Override
    protected void onSizeChanged(int w, int h, int old h,  int old all izeChanged( w, h, oldw, oldh);
        this.viewWidth = w;
        this.viewHeight = h;
    }
}

;<🎜>
;< p><b>color.xml:</b></p>
<pre>
<?xml version="1.0" encoding="utf-8"?>
<sumber>
    <color name="reveal_color">#FFFFFF</color>
    <color name="bottom_color">#3086E4< color< color>> name="bottom_bg">#40BAF8</color>
</resources>



activity_main.xml:

源罁一(AS)工程的哦):ButtonDemo.zip

本节小结:

本节给大家介绍了Button在实陀一的現实陀一的現有些东西我们还没学,这里 知道下即可,后面学到自然会深入讲解,谢谢~