ChinaMapInfoView - 基於 Android 的中國地圖自定義 View

SoraShiro發表於2017-12-19

0xff 更新

  • v1.0.2 增加長按回撥事件

0x00 前言

先扔個地址 w :Github - ChinaMapInfoView

這是一個可移動、縮放的中國地圖,開發者可以使用它來直觀顯示基於省的統計資料,如各省某年人口出生率、各省每月最高氣溫等。 實現了省份點選 / 長按事件回撥的介面,可以用來跳轉到顯示該省詳細資料的 Activity。 使用 SVG-Android 開源庫生成對應的 Drawable , 支援 API 14(Android 4.0)+ 版本。

歡迎 Star :)

0x01 預覽和說明

效果預覽(放縮的時候要兩個手指,藍框 A 是模擬器的虛擬按鍵,模擬其中一個手指):

preview.gif

支援特性:

  • 平移
  • 縮放
  • 高亮選中省份
  • 當圖片過度移動則回滾
  • 實現 ChinaMapViewProvinceListener 介面來進行回撥互動(點選 / 長按)
  • 自定義填充 / 點選 / 長按(邊界)顏色、邊界寬度

0x02 下載

Maven

<dependency>
  <groupId>com.sorashiro.ChinaMapInfoView</groupId>
  <artifactId>library</artifactId>
  <version>1.0.2</version>
  <type>pom</type>
</dependency>
複製程式碼

Gradle

compile 'com.sorashiro.ChinaMapInfoView:library:1.0.2'
複製程式碼

0x03 如何使用

activity_main.xml

<com.sorashiro.chinamapinfoview.ChinaMapInfoView
    android:id="@+id/imgCnMap"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
/>
複製程式碼

MainActivity.java (使用了 Butter Knife)

public class MainActivity extends AppCompatActivity implements ChinaMapInfoView.ChinaMapViewProvinceListener {

    @BindView(R2.id.imgCnMap)
    ChinaMapInfoView imgCnMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        initView();
    }

    private void initView() {
        imgCnMap.setChinaMapViewProvinceListener(this);
    }

    @Override
    public void onProvinceClick(int i) {
        LogAndToastUtil.ToastOut(this, imgCnMap.getCnMap().PROVINCE[i] + " is clicked");
    }

    @Override
    public void onProvinceLongClick(int i) {
        LogAndToastUtil.ToastOut(this, imgCnMap.getCnMap().PROVINCE[i] + " is long clicked");
    }
}
複製程式碼

0x04 自定義

如果你想同時改變安徽省的 填充顏色高亮顏色 ,只要這麼做:

// first get the config map
// 首先獲取總設定 map
CnMap cnMap = imgCnMap.getCnMap();
HashMap<String, CnMapConfig> cnConfigMap = cnMap.configMap;
// or configMap.get("Anhui"); but use cnMap.PROVINCE[0] better
// 或者 configMap.get("Anhui"); 但是用 cnMap.PROVINCE[0] 更好些
CnMapConfig configAnhui = cnConfigMap.get(cnMap.PROVINCE[0]);
// support method chaining
// 支援鏈式呼叫(方法鏈)
configAnhui
        .setFillColor(Color.parseColor("#ee0000"))
        .setClickColor(Color.parseColor("#99ffff"));
複製程式碼

更多見 Github :) 感謝支援 w

相關文章