国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android自定義控件ImageView實(shí)現(xiàn)點(diǎn)擊之后出現(xiàn)陰影效果

2019-10-22 18:20:36
字體:
供稿:網(wǎng)友

今天美工 直接給我一張圖片,要我實(shí)現(xiàn)圖片點(diǎn)擊之后有陰影效果,當(dāng)時想到了ImageButton,隨即自己寫了個Demo,發(fā)現(xiàn)ImageButton繼承ImageView 會有一個默認(rèn)的背景樣式,而且在布局中設(shè)計src(前景) 太丑,于是自己寫了個自定義控件ImageView實(shí)現(xiàn)了點(diǎn)擊之后,點(diǎn)擊區(qū)域有一個灰色的陰影效果,如下:

Android,ImageView,陰影

添加監(jiān)聽回調(diào)等;

布局文件代碼:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:id="@+id/activity_main"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  tools:context="com.hanzheng.imagebutton.MainActivity"  android:orientation="vertical">    <ImageButton   android:id="@+id/button"   android:layout_width="100dp"   android:layout_height="100dp"   android:src="#ff0000"   />    <com.hanzheng.imagebutton.ClickImageView   android:layout_marginTop="10dp"   android:id="@+id/clickimageview"   android:clickable="true"   android:src="@drawable/flow"   android:layout_width="wrap_content"   android:layout_height="wrap_content"/>    <com.hanzheng.imagebutton.ClickImageView   android:layout_marginTop="10dp"   android:id="@+id/clickimageview2"   android:clickable="true"   android:src="#0f0"   android:layout_width="100dp"   android:layout_height="100dp"/> </LinearLayout> 

注意: 自定義控件中使用的src屬性,使用background會失效

ImageView中xml屬性src和background的區(qū)別:

background會根據(jù)ImageView組件給定的長寬進(jìn)行拉伸,而src就存放的是原圖的大小,不會進(jìn)行拉伸。src是圖片內(nèi)容(前景),bg是背景,可以同時使用。

此外:scaleType只對src起作用;bg可設(shè)置透明度,比如在ImageButton中就可以用Android:scaleType控制圖片的縮放方式,控制的圖片為資源而不是背景,即android:src="@drawable/logo",而非android:background="@drawable/logo"程序中動態(tài)加載圖片也類似,如:應(yīng)該imgView.setImageResource(R.drawable.*);而非imgView.setBackgroundResource(R.drawable.*);

更詳細(xì)的scaleType說明:

CENTER /center 在視圖中心顯示圖片,并且不縮放圖片
CENTER_CROP / centerCrop 按比例縮放圖片,使得圖片長 (寬)的大于等于視圖的相應(yīng)維度
CENTER_INSIDE / centerInside 按比例縮放圖片,使得圖片長 (寬)的小于等于視圖的相應(yīng)維度
FIT_CENTER / fitCenter 按比例縮放圖片到視圖的最小邊,居中顯示
FIT_END / fitEnd 按比例縮放圖片到視圖的最小邊,顯示在視圖的下部分位置
FIT_START / fitStart 把圖片按比例擴(kuò)大/縮小到視圖的最小邊,顯示在視圖的上部分位置
FIT_XY / fitXY 把圖片不按比例縮放到視圖的大小顯示
MATRIX / matrix 用矩陣來繪制

自定義控件ClickImageView的代碼:

package com.hanzheng.imagebutton;  import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ImageView;  /**  * Created by zmybi on 2017/1/3.  */  public class ClickImageView extends ImageView {   public ClickImageView(Context context) {   super(context);  }  public ClickImageView(Context context, AttributeSet attrs) {   super(context, attrs);  }  public ClickImageView(Context context, AttributeSet attrs, int defStyleAttr) {   super(context, attrs, defStyleAttr);  }    @Override  public boolean onTouchEvent(MotionEvent event) {    switch (event.getAction()) {    case MotionEvent.ACTION_DOWN:     this.setColorFilter(0x33000000);     //重寫觸摸事件的方法,當(dāng)按鈕被點(diǎn)擊的時候     mOnClickListener.onClick();     return true;    case MotionEvent.ACTION_UP:    case MotionEvent.ACTION_CANCEL:     this.setColorFilter(null);     break;   }   return super.onTouchEvent(event);  }   /**   * 定義點(diǎn)擊的接口   */  interface OnClickListener {   void onClick();  }   private OnClickListener mOnClickListener;   public void setOnClickListener (OnClickListener onClickListener) {   this.mOnClickListener = onClickListener;  }   } 

MainActivity中的代碼:一個監(jiān)聽回調(diào)

package com.hanzheng.imagebutton;  import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ImageButton; import android.widget.Toast;  public class MainActivity extends AppCompatActivity {   private ImageButton mBt;  private ClickImageView mCiv;  private ClickImageView mCiv2;   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   mBt = (ImageButton) findViewById(R.id.button);   mCiv = (ClickImageView) findViewById(R.id.clickimageview);   mCiv2 = (ClickImageView) findViewById(R.id.clickimageview2);   mCiv.setOnClickListener(new ClickImageView.OnClickListener() {    @Override    public void onClick() {     Toast.makeText(MainActivity.this,"自定義ImageView點(diǎn)擊1",Toast.LENGTH_SHORT).show();    }   });    mCiv2.setOnClickListener(new ClickImageView.OnClickListener() {    @Override    public void onClick() {     Toast.makeText(MainActivity.this,"自定義ImageView點(diǎn)擊2",Toast.LENGTH_SHORT).show();    }   });    mBt.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {     Toast.makeText(MainActivity.this,"ImageButton點(diǎn)擊",Toast.LENGTH_SHORT).show();    }   });  } } 

至此,一個自定義的ImageView實(shí)現(xiàn)點(diǎn)擊陰影完成。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 腾冲县| 朔州市| 英山县| 上虞市| 鲁山县| 双鸭山市| 淮南市| 昌图县| 扶风县| 吉安市| 绥宁县| 阳江市| 永福县| 咸宁市| 濉溪县| 克拉玛依市| 宝丰县| 五指山市| 淅川县| 龙岩市| 佛学| 五大连池市| 仁化县| 青浦区| 金塔县| 高州市| 太白县| 绥江县| 郧西县| 丘北县| 礼泉县| 蒲江县| 隆安县| 漳浦县| 灌南县| 济源市| 平度市| 威远县| 梁山县| 顺昌县| 海淀区|