0xff 更新
- v1.0.2 增加長按回撥事件
0x00 前言
先扔個地址 w :Github - ChinaMapInfoView
這是一個可移動、縮放的中國地圖,開發者可以使用它來直觀顯示基於省的統計資料,如各省某年人口出生率、各省每月最高氣溫等。 實現了省份點選 / 長按事件回撥的介面,可以用來跳轉到顯示該省詳細資料的 Activity。 使用 SVG-Android 開源庫生成對應的 Drawable , 支援 API 14(Android 4.0)+ 版本。
歡迎 Star :)
0x01 預覽和說明
效果預覽(放縮的時候要兩個手指,藍框 A 是模擬器的虛擬按鍵,模擬其中一個手指):
支援特性:
- 平移
- 縮放
- 高亮選中省份
- 當圖片過度移動則回滾
- 實現 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