diff --git a/android/app/src/main/java/com/performanceexample/CustomAdapter.java b/android/app/src/main/java/com/performanceexample/CustomAdapter.java new file mode 100644 index 0000000..49a7ed9 --- /dev/null +++ b/android/app/src/main/java/com/performanceexample/CustomAdapter.java @@ -0,0 +1,35 @@ +package com.performanceexample; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.util.List; + +public class CustomAdapter extends RecyclerView.Adapter { + String TAG = "react"; + private List list; + + public CustomAdapter(List list) { + this.list = list; + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.image_list_row, parent, false); + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(MyViewHolder holder, int position) { + ListViewCell listViewCell = list.get(position); + holder.imageView.setImageURI(listViewCell.getUri()); + } + + @Override + public int getItemCount() { + return list.size(); + } +} \ No newline at end of file diff --git a/android/app/src/main/java/com/performanceexample/ListViewCell.java b/android/app/src/main/java/com/performanceexample/ListViewCell.java new file mode 100644 index 0000000..565ad97 --- /dev/null +++ b/android/app/src/main/java/com/performanceexample/ListViewCell.java @@ -0,0 +1,17 @@ +package com.performanceexample; + +import android.net.Uri; + +public class ListViewCell { + private Uri uri; + + public ListViewCell(String uri) { + this.uri = Uri.parse(uri); + } + + + public Uri getUri() { + return uri; + } + +} \ No newline at end of file diff --git a/android/app/src/main/java/com/performanceexample/ListViewPackage.java b/android/app/src/main/java/com/performanceexample/ListViewPackage.java new file mode 100644 index 0000000..734a5ea --- /dev/null +++ b/android/app/src/main/java/com/performanceexample/ListViewPackage.java @@ -0,0 +1,32 @@ +package com.performanceexample; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.JavaScriptModule; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + + +public class ListViewPackage implements ReactPackage { + + @Override + public List createNativeModules(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } + + @Override + public List> createJSModules() { + return Collections.emptyList(); + } + + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Arrays.asList( + new ReactListViewManager() + ); + } +} \ No newline at end of file diff --git a/android/app/src/main/java/com/performanceexample/MainApplication.java b/android/app/src/main/java/com/performanceexample/MainApplication.java index 51799ea..fb72efd 100644 --- a/android/app/src/main/java/com/performanceexample/MainApplication.java +++ b/android/app/src/main/java/com/performanceexample/MainApplication.java @@ -1,10 +1,8 @@ package com.performanceexample; import android.app.Application; -import android.util.Log; import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; @@ -24,7 +22,8 @@ public boolean getUseDeveloperSupport() { @Override protected List getPackages() { return Arrays.asList( - new MainReactPackage() + new MainReactPackage(), + new ListViewPackage() ); } }; diff --git a/android/app/src/main/java/com/performanceexample/MyViewHolder.java b/android/app/src/main/java/com/performanceexample/MyViewHolder.java new file mode 100644 index 0000000..0ca3fef --- /dev/null +++ b/android/app/src/main/java/com/performanceexample/MyViewHolder.java @@ -0,0 +1,16 @@ +package com.performanceexample; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.facebook.drawee.view.SimpleDraweeView; + +public class MyViewHolder extends RecyclerView.ViewHolder { + public SimpleDraweeView imageView; + + public MyViewHolder(View view) { + super(view); + imageView = (SimpleDraweeView) view.findViewById(R.id.my_image_view); + + } +} \ No newline at end of file diff --git a/android/app/src/main/java/com/performanceexample/ReactListViewManager.java b/android/app/src/main/java/com/performanceexample/ReactListViewManager.java new file mode 100644 index 0000000..c6ddac0 --- /dev/null +++ b/android/app/src/main/java/com/performanceexample/ReactListViewManager.java @@ -0,0 +1,55 @@ +package com.performanceexample; + +import android.support.annotation.Nullable; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; + +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.uimanager.SimpleViewManager; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.annotations.ReactProp; + + +import java.util.ArrayList; +import java.util.List; + +public class ReactListViewManager extends SimpleViewManager { + private List list = new ArrayList<>(); + private RecyclerView recyclerView; + private CustomAdapter mAdapter; + + @Override + public String getName() { + return "RCTListView"; + } + + @Override + protected RecyclerView createViewInstance(ThemedReactContext reactContext) { + mAdapter = new CustomAdapter(list); + return new RecyclerView(reactContext); + } + + @ReactProp(name = "src") + public void setSrc(RecyclerView view,@Nullable ReadableMap src) { + view.setHasFixedSize(true); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext()); + view.setLayoutManager(mLayoutManager); + view.setItemAnimator(new DefaultItemAnimator()); + view.setAdapter(mAdapter); + prepareImageData(src); + } + + private void prepareImageData(ReadableMap map){ + + ReadableArray obj = map.getArray("images"); + for(int i = 0; i + + + \ No newline at end of file diff --git a/js/AndroidImageList.js b/js/AndroidImageList.js new file mode 100644 index 0000000..ade0043 --- /dev/null +++ b/js/AndroidImageList.js @@ -0,0 +1,13 @@ + +import { PropTypes } from 'react' +import { requireNativeComponent, View } from 'react-native' + +var iface = { + name: 'ImageView', + propTypes: { + src: PropTypes.object, + ...View.propTypes + }, +} + +module.exports = requireNativeComponent('RCTListView', iface) diff --git a/js/Background.js b/js/Background.js index c81f8ef..dc1a358 100644 --- a/js/Background.js +++ b/js/Background.js @@ -1,6 +1,6 @@ import React from 'react' import { Image, View } from 'react-native' -import bgImage from './assets/bg_transparent.png' +import bgImage from './assets/bg_solid.png' import style from './Style' @@ -13,16 +13,12 @@ export const BaseView = (props) => { } export const BgView = (props) => { - const propStyle = { - backgroundColor: 'transparent' - } return ( ) diff --git a/js/HomeScreen.js b/js/HomeScreen.js index 74d2e17..77c91b0 100644 --- a/js/HomeScreen.js +++ b/js/HomeScreen.js @@ -1,42 +1,28 @@ import React from 'react' -import { Text, View, Button, Dimensions, Image, ScrollView } from 'react-native' import { FlickrImages } from './FlickrImages' - import { BgView } from './Background' -import style from './Style' + +import ListViewCustom from './AndroidImageList' class HomeScreen extends React.Component { - renderCells (data) { - return data.map((cell, index) => { - const {uri} = cell - return ( - - - - - ) - }) - } + constructor(props) { + super(props) - renderImageCells (cellData) { - return ( - - {this.renderCells(cellData)} - - ) + this.state = { + dataSource:{"images": FlickrImages} + } } render() { - const { height } = Dimensions.get('window') - let cells = this.renderImageCells(FlickrImages) return ( - - {cells} - + + - ); + ) } } diff --git a/js/ImageRow.js b/js/ImageRow.js new file mode 100644 index 0000000..eaa9b35 --- /dev/null +++ b/js/ImageRow.js @@ -0,0 +1,12 @@ + +import React from 'react' +import { View, Image } from 'react-native' + +import style from './Style' + +const ImageRow = (props) => ( + + + +) +export default ImageRow diff --git a/js/Style.js b/js/Style.js index 2e55a83..22a2354 100644 --- a/js/Style.js +++ b/js/Style.js @@ -5,7 +5,6 @@ export default StyleSheet.create({ flexDirection: 'column', flex:1, justifyContent:'center', - backgroundColor: 'transparent', paddingTop: 20, paddingLeft: 24, paddingRight: 24, @@ -15,12 +14,14 @@ export default StyleSheet.create({ }, cellContainer: { flexDirection: 'row', - paddingBottom: 10 + paddingTop: 10, + paddingLeft: 24, + paddingRight: 24, + elevation: 2 }, imageContainer: { height: 200, flex: 0.8, - resizeMode: 'cover', justifyContent:'flex-end' }, cellTitle: { @@ -34,7 +35,6 @@ export default StyleSheet.create({ flexDirection: 'column', justifyContent: 'flex-start', alignItems: 'stretch', - backgroundColor: '#2B2C2C', paddingTop: 80, paddingRight: 12, paddingBottom: 20, @@ -43,7 +43,6 @@ export default StyleSheet.create({ pageBackground: { flex: 1, width: null, - height: null, - backgroundColor: '#2B2C2C' + height: null } })