mirror of
https://github.com/tateisu/SubwayTooter
synced 2025-02-07 06:04:23 +01:00
round corner
This commit is contained in:
parent
4612e66743
commit
2188825925
@ -41,7 +41,6 @@ import android.widget.ImageButton;
|
|||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.android.volley.toolbox.NetworkImageView;
|
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
@ -70,6 +69,7 @@ import jp.juggler.subwaytooter.util.ActionsDialog;
|
|||||||
import jp.juggler.subwaytooter.util.HTMLDecoder;
|
import jp.juggler.subwaytooter.util.HTMLDecoder;
|
||||||
import jp.juggler.subwaytooter.util.LogCategory;
|
import jp.juggler.subwaytooter.util.LogCategory;
|
||||||
import jp.juggler.subwaytooter.util.MyEditText;
|
import jp.juggler.subwaytooter.util.MyEditText;
|
||||||
|
import jp.juggler.subwaytooter.util.MyNetworkImageView;
|
||||||
import jp.juggler.subwaytooter.util.PostAttachment;
|
import jp.juggler.subwaytooter.util.PostAttachment;
|
||||||
import jp.juggler.subwaytooter.util.Utils;
|
import jp.juggler.subwaytooter.util.Utils;
|
||||||
import okhttp3.MediaType;
|
import okhttp3.MediaType;
|
||||||
@ -496,7 +496,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||||||
View btnAttachment;
|
View btnAttachment;
|
||||||
View btnPost;
|
View btnPost;
|
||||||
View llAttachment;
|
View llAttachment;
|
||||||
final NetworkImageView[] ivMedia = new NetworkImageView[ 4 ];
|
final MyNetworkImageView[] ivMedia = new MyNetworkImageView[ 4 ];
|
||||||
CheckBox cbNSFW;
|
CheckBox cbNSFW;
|
||||||
CheckBox cbContentWarning;
|
CheckBox cbContentWarning;
|
||||||
MyEditText etContentWarning;
|
MyEditText etContentWarning;
|
||||||
@ -511,7 +511,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||||||
View llReply;
|
View llReply;
|
||||||
TextView tvReplyTo;
|
TextView tvReplyTo;
|
||||||
View btnRemoveReply;
|
View btnRemoveReply;
|
||||||
NetworkImageView ivReply;
|
MyNetworkImageView ivReply;
|
||||||
ScrollView scrollView;
|
ScrollView scrollView;
|
||||||
|
|
||||||
private void initUI(){
|
private void initUI(){
|
||||||
@ -527,10 +527,10 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||||||
btnAttachment = findViewById( R.id.btnAttachment );
|
btnAttachment = findViewById( R.id.btnAttachment );
|
||||||
btnPost = findViewById( R.id.btnPost );
|
btnPost = findViewById( R.id.btnPost );
|
||||||
llAttachment = findViewById( R.id.llAttachment );
|
llAttachment = findViewById( R.id.llAttachment );
|
||||||
ivMedia[ 0 ] = (NetworkImageView) findViewById( R.id.ivMedia1 );
|
ivMedia[ 0 ] = (MyNetworkImageView) findViewById( R.id.ivMedia1 );
|
||||||
ivMedia[ 1 ] = (NetworkImageView) findViewById( R.id.ivMedia2 );
|
ivMedia[ 1 ] = (MyNetworkImageView) findViewById( R.id.ivMedia2 );
|
||||||
ivMedia[ 2 ] = (NetworkImageView) findViewById( R.id.ivMedia3 );
|
ivMedia[ 2 ] = (MyNetworkImageView) findViewById( R.id.ivMedia3 );
|
||||||
ivMedia[ 3 ] = (NetworkImageView) findViewById( R.id.ivMedia4 );
|
ivMedia[ 3 ] = (MyNetworkImageView) findViewById( R.id.ivMedia4 );
|
||||||
cbNSFW = (CheckBox) findViewById( R.id.cbNSFW );
|
cbNSFW = (CheckBox) findViewById( R.id.cbNSFW );
|
||||||
cbContentWarning = (CheckBox) findViewById( R.id.cbContentWarning );
|
cbContentWarning = (CheckBox) findViewById( R.id.cbContentWarning );
|
||||||
etContentWarning = (MyEditText) findViewById( R.id.etContentWarning );
|
etContentWarning = (MyEditText) findViewById( R.id.etContentWarning );
|
||||||
@ -540,7 +540,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||||||
llReply = findViewById( R.id.llReply );
|
llReply = findViewById( R.id.llReply );
|
||||||
tvReplyTo = (TextView) findViewById( R.id.tvReplyTo );
|
tvReplyTo = (TextView) findViewById( R.id.tvReplyTo );
|
||||||
btnRemoveReply = findViewById( R.id.btnRemoveReply );
|
btnRemoveReply = findViewById( R.id.btnRemoveReply );
|
||||||
ivReply = (NetworkImageView) findViewById( R.id.ivReply );
|
ivReply = (MyNetworkImageView) findViewById( R.id.ivReply );
|
||||||
|
|
||||||
account_list = SavedAccount.loadAccountList( log );
|
account_list = SavedAccount.loadAccountList( log );
|
||||||
Collections.sort( account_list, new Comparator< SavedAccount >() {
|
Collections.sort( account_list, new Comparator< SavedAccount >() {
|
||||||
@ -557,7 +557,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||||||
btnPost.setOnClickListener( this );
|
btnPost.setOnClickListener( this );
|
||||||
btnRemoveReply.setOnClickListener( this );
|
btnRemoveReply.setOnClickListener( this );
|
||||||
|
|
||||||
for( NetworkImageView iv : ivMedia ){
|
for( MyNetworkImageView iv : ivMedia ){
|
||||||
iv.setOnClickListener( this );
|
iv.setOnClickListener( this );
|
||||||
iv.setDefaultImageResId( Styler.getAttributeResourceId( this, R.attr.ic_loading ) );
|
iv.setDefaultImageResId( Styler.getAttributeResourceId( this, R.attr.ic_loading ) );
|
||||||
iv.setErrorImageResId( Styler.getAttributeResourceId( this, R.attr.ic_unknown ) );
|
iv.setErrorImageResId( Styler.getAttributeResourceId( this, R.attr.ic_unknown ) );
|
||||||
@ -776,11 +776,12 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showAttachment_sub( NetworkImageView iv, int idx ){
|
private void showAttachment_sub( MyNetworkImageView iv, int idx ){
|
||||||
if( idx >= attachment_list.size() ){
|
if( idx >= attachment_list.size() ){
|
||||||
iv.setVisibility( View.GONE );
|
iv.setVisibility( View.GONE );
|
||||||
}else{
|
}else{
|
||||||
iv.setVisibility( View.VISIBLE );
|
iv.setVisibility( View.VISIBLE );
|
||||||
|
iv.setCornerRadius( density * 4f );
|
||||||
PostAttachment a = attachment_list.get( idx );
|
PostAttachment a = attachment_list.get( idx );
|
||||||
if( a.attachment != null && a.status == PostAttachment.ATTACHMENT_UPLOADED ){
|
if( a.attachment != null && a.status == PostAttachment.ATTACHMENT_UPLOADED ){
|
||||||
iv.setImageUrl( a.attachment.preview_url, App1.getImageLoader() );
|
iv.setImageUrl( a.attachment.preview_url, App1.getImageLoader() );
|
||||||
@ -1578,7 +1579,9 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||||||
}else{
|
}else{
|
||||||
llReply.setVisibility( View.VISIBLE );
|
llReply.setVisibility( View.VISIBLE );
|
||||||
tvReplyTo.setText( HTMLDecoder.decodeHTML( account, in_reply_to_text ) );
|
tvReplyTo.setText( HTMLDecoder.decodeHTML( account, in_reply_to_text ) );
|
||||||
|
ivReply.setCornerRadius( density * 4f );
|
||||||
ivReply.setImageUrl( in_reply_to_image, App1.getImageLoader() );
|
ivReply.setImageUrl( in_reply_to_image, App1.getImageLoader() );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ import android.widget.ImageView;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.android.volley.toolbox.NetworkImageView;
|
|
||||||
|
|
||||||
import jp.juggler.subwaytooter.api.entity.TootAccount;
|
import jp.juggler.subwaytooter.api.entity.TootAccount;
|
||||||
import jp.juggler.subwaytooter.api.entity.TootStatus;
|
import jp.juggler.subwaytooter.api.entity.TootStatus;
|
||||||
@ -15,6 +14,7 @@ import jp.juggler.subwaytooter.table.SavedAccount;
|
|||||||
import jp.juggler.subwaytooter.table.UserRelation;
|
import jp.juggler.subwaytooter.table.UserRelation;
|
||||||
import jp.juggler.subwaytooter.util.Emojione;
|
import jp.juggler.subwaytooter.util.Emojione;
|
||||||
import jp.juggler.subwaytooter.util.MyLinkMovementMethod;
|
import jp.juggler.subwaytooter.util.MyLinkMovementMethod;
|
||||||
|
import jp.juggler.subwaytooter.util.MyNetworkImageView;
|
||||||
|
|
||||||
class HeaderViewHolder implements View.OnClickListener {
|
class HeaderViewHolder implements View.OnClickListener {
|
||||||
private final Column column;
|
private final Column column;
|
||||||
@ -22,9 +22,9 @@ class HeaderViewHolder implements View.OnClickListener {
|
|||||||
private final SavedAccount access_info;
|
private final SavedAccount access_info;
|
||||||
|
|
||||||
final View viewRoot;
|
final View viewRoot;
|
||||||
private final NetworkImageView ivBackground;
|
private final MyNetworkImageView ivBackground;
|
||||||
private final TextView tvCreated;
|
private final TextView tvCreated;
|
||||||
private final NetworkImageView ivAvatar;
|
private final MyNetworkImageView ivAvatar;
|
||||||
private final TextView tvDisplayName;
|
private final TextView tvDisplayName;
|
||||||
private final TextView tvAcct;
|
private final TextView tvAcct;
|
||||||
private final Button btnFollowing;
|
private final Button btnFollowing;
|
||||||
@ -42,9 +42,9 @@ class HeaderViewHolder implements View.OnClickListener {
|
|||||||
this.access_info = column.access_info;
|
this.access_info = column.access_info;
|
||||||
this.viewRoot = activity.getLayoutInflater().inflate( R.layout.lv_list_header, parent, false );
|
this.viewRoot = activity.getLayoutInflater().inflate( R.layout.lv_list_header, parent, false );
|
||||||
|
|
||||||
ivBackground = (NetworkImageView) viewRoot.findViewById( R.id.ivBackground );
|
ivBackground = (MyNetworkImageView) viewRoot.findViewById( R.id.ivBackground );
|
||||||
tvCreated = (TextView) viewRoot.findViewById( R.id.tvCreated );
|
tvCreated = (TextView) viewRoot.findViewById( R.id.tvCreated );
|
||||||
ivAvatar = (NetworkImageView) viewRoot.findViewById( R.id.ivAvatar );
|
ivAvatar = (MyNetworkImageView) viewRoot.findViewById( R.id.ivAvatar );
|
||||||
tvDisplayName = (TextView) viewRoot.findViewById( R.id.tvDisplayName );
|
tvDisplayName = (TextView) viewRoot.findViewById( R.id.tvDisplayName );
|
||||||
tvAcct = (TextView) viewRoot.findViewById( R.id.tvAcct );
|
tvAcct = (TextView) viewRoot.findViewById( R.id.tvAcct );
|
||||||
btnFollowing = (Button) viewRoot.findViewById( R.id.btnFollowing );
|
btnFollowing = (Button) viewRoot.findViewById( R.id.btnFollowing );
|
||||||
@ -82,6 +82,7 @@ class HeaderViewHolder implements View.OnClickListener {
|
|||||||
}else{
|
}else{
|
||||||
tvCreated.setText( TootStatus.formatTime( who.time_created_at ) );
|
tvCreated.setText( TootStatus.formatTime( who.time_created_at ) );
|
||||||
ivBackground.setImageUrl( access_info.supplyBaseUrl( who.header_static ), App1.getImageLoader() );
|
ivBackground.setImageUrl( access_info.supplyBaseUrl( who.header_static ), App1.getImageLoader() );
|
||||||
|
ivAvatar.setCornerRadius( activity.density * 8f );
|
||||||
ivAvatar.setImageUrl( access_info.supplyBaseUrl( who.avatar_static ), App1.getImageLoader() );
|
ivAvatar.setImageUrl( access_info.supplyBaseUrl( who.avatar_static ), App1.getImageLoader() );
|
||||||
tvDisplayName.setText( who.display_name );
|
tvDisplayName.setText( who.display_name );
|
||||||
|
|
||||||
|
@ -8,8 +8,6 @@ import android.widget.ImageButton;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.android.volley.toolbox.NetworkImageView;
|
|
||||||
|
|
||||||
import jp.juggler.subwaytooter.api.entity.TootAccount;
|
import jp.juggler.subwaytooter.api.entity.TootAccount;
|
||||||
import jp.juggler.subwaytooter.api.entity.TootAttachment;
|
import jp.juggler.subwaytooter.api.entity.TootAttachment;
|
||||||
import jp.juggler.subwaytooter.api.entity.TootGap;
|
import jp.juggler.subwaytooter.api.entity.TootGap;
|
||||||
@ -22,6 +20,7 @@ import jp.juggler.subwaytooter.table.SavedAccount;
|
|||||||
import jp.juggler.subwaytooter.table.UserRelation;
|
import jp.juggler.subwaytooter.table.UserRelation;
|
||||||
import jp.juggler.subwaytooter.util.MyLinkMovementMethod;
|
import jp.juggler.subwaytooter.util.MyLinkMovementMethod;
|
||||||
import jp.juggler.subwaytooter.util.MyListView;
|
import jp.juggler.subwaytooter.util.MyListView;
|
||||||
|
import jp.juggler.subwaytooter.util.MyNetworkImageView;
|
||||||
import jp.juggler.subwaytooter.util.MyTextView;
|
import jp.juggler.subwaytooter.util.MyTextView;
|
||||||
import jp.juggler.subwaytooter.util.Utils;
|
import jp.juggler.subwaytooter.util.Utils;
|
||||||
|
|
||||||
@ -39,14 +38,14 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
private final TextView tvBoostedTime;
|
private final TextView tvBoostedTime;
|
||||||
|
|
||||||
private final View llFollow;
|
private final View llFollow;
|
||||||
private final NetworkImageView ivFollow;
|
private final MyNetworkImageView ivFollow;
|
||||||
private final TextView tvFollowerName;
|
private final TextView tvFollowerName;
|
||||||
private final TextView tvFollowerAcct;
|
private final TextView tvFollowerAcct;
|
||||||
private final ImageButton btnFollow;
|
private final ImageButton btnFollow;
|
||||||
private final ImageView ivFollowedBy;
|
private final ImageView ivFollowedBy;
|
||||||
|
|
||||||
private final View llStatus;
|
private final View llStatus;
|
||||||
private final NetworkImageView ivThumbnail;
|
private final MyNetworkImageView ivThumbnail;
|
||||||
private final TextView tvName;
|
private final TextView tvName;
|
||||||
private final TextView tvTime;
|
private final TextView tvTime;
|
||||||
private final TextView tvAcct;
|
private final TextView tvAcct;
|
||||||
@ -62,10 +61,10 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
private final View flMedia;
|
private final View flMedia;
|
||||||
private final View btnShowMedia;
|
private final View btnShowMedia;
|
||||||
|
|
||||||
private final NetworkImageView ivMedia1;
|
private final MyNetworkImageView ivMedia1;
|
||||||
private final NetworkImageView ivMedia2;
|
private final MyNetworkImageView ivMedia2;
|
||||||
private final NetworkImageView ivMedia3;
|
private final MyNetworkImageView ivMedia3;
|
||||||
private final NetworkImageView ivMedia4;
|
private final MyNetworkImageView ivMedia4;
|
||||||
|
|
||||||
private final StatusButtons buttons_for_status;
|
private final StatusButtons buttons_for_status;
|
||||||
|
|
||||||
@ -95,7 +94,7 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
this.tvBoostedAcct = (TextView) view.findViewById( R.id.tvBoostedAcct );
|
this.tvBoostedAcct = (TextView) view.findViewById( R.id.tvBoostedAcct );
|
||||||
|
|
||||||
this.llFollow = view.findViewById( R.id.llFollow );
|
this.llFollow = view.findViewById( R.id.llFollow );
|
||||||
this.ivFollow = (NetworkImageView) view.findViewById( R.id.ivFollow );
|
this.ivFollow = (MyNetworkImageView) view.findViewById( R.id.ivFollow );
|
||||||
this.tvFollowerName = (TextView) view.findViewById( R.id.tvFollowerName );
|
this.tvFollowerName = (TextView) view.findViewById( R.id.tvFollowerName );
|
||||||
this.tvFollowerAcct = (TextView) view.findViewById( R.id.tvFollowerAcct );
|
this.tvFollowerAcct = (TextView) view.findViewById( R.id.tvFollowerAcct );
|
||||||
this.btnFollow = (ImageButton) view.findViewById( R.id.btnFollow );
|
this.btnFollow = (ImageButton) view.findViewById( R.id.btnFollow );
|
||||||
@ -103,7 +102,7 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
|
|
||||||
this.llStatus = view.findViewById( R.id.llStatus );
|
this.llStatus = view.findViewById( R.id.llStatus );
|
||||||
|
|
||||||
this.ivThumbnail = (NetworkImageView) view.findViewById( R.id.ivThumbnail );
|
this.ivThumbnail = (MyNetworkImageView) view.findViewById( R.id.ivThumbnail );
|
||||||
this.tvName = (TextView) view.findViewById( R.id.tvName );
|
this.tvName = (TextView) view.findViewById( R.id.tvName );
|
||||||
this.tvTime = (TextView) view.findViewById( R.id.tvTime );
|
this.tvTime = (TextView) view.findViewById( R.id.tvTime );
|
||||||
this.tvAcct = (TextView) view.findViewById( R.id.tvAcct );
|
this.tvAcct = (TextView) view.findViewById( R.id.tvAcct );
|
||||||
@ -120,10 +119,10 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
|
|
||||||
this.flMedia = view.findViewById( R.id.flMedia );
|
this.flMedia = view.findViewById( R.id.flMedia );
|
||||||
this.btnShowMedia = view.findViewById( R.id.btnShowMedia );
|
this.btnShowMedia = view.findViewById( R.id.btnShowMedia );
|
||||||
this.ivMedia1 = (NetworkImageView) view.findViewById( R.id.ivMedia1 );
|
this.ivMedia1 = (MyNetworkImageView) view.findViewById( R.id.ivMedia1 );
|
||||||
this.ivMedia2 = (NetworkImageView) view.findViewById( R.id.ivMedia2 );
|
this.ivMedia2 = (MyNetworkImageView) view.findViewById( R.id.ivMedia2 );
|
||||||
this.ivMedia3 = (NetworkImageView) view.findViewById( R.id.ivMedia3 );
|
this.ivMedia3 = (MyNetworkImageView) view.findViewById( R.id.ivMedia3 );
|
||||||
this.ivMedia4 = (NetworkImageView) view.findViewById( R.id.ivMedia4 );
|
this.ivMedia4 = (MyNetworkImageView) view.findViewById( R.id.ivMedia4 );
|
||||||
|
|
||||||
this.llSearchTag = view.findViewById( R.id.llSearchTag );
|
this.llSearchTag = view.findViewById( R.id.llSearchTag );
|
||||||
this.btnSearchTag = (Button) view.findViewById( R.id.btnSearchTag );
|
this.btnSearchTag = (Button) view.findViewById( R.id.btnSearchTag );
|
||||||
@ -261,6 +260,7 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
private void showFollow( TootAccount who ){
|
private void showFollow( TootAccount who ){
|
||||||
account_follow = who;
|
account_follow = who;
|
||||||
llFollow.setVisibility( View.VISIBLE );
|
llFollow.setVisibility( View.VISIBLE );
|
||||||
|
ivFollow.setCornerRadius( activity.density * 4f );
|
||||||
ivFollow.setImageUrl( access_info.supplyBaseUrl( who.avatar_static ), App1.getImageLoader() );
|
ivFollow.setImageUrl( access_info.supplyBaseUrl( who.avatar_static ), App1.getImageLoader() );
|
||||||
tvFollowerName.setText( who.display_name );
|
tvFollowerName.setText( who.display_name );
|
||||||
setAcct( tvFollowerAcct, access_info.getFullAcct( who ), R.attr.colorAcctSmall );
|
setAcct( tvFollowerAcct, access_info.getFullAcct( who ), R.attr.colorAcctSmall );
|
||||||
@ -278,6 +278,7 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
tvTime.setText( TootStatus.formatTime( status.time_created_at ) );
|
tvTime.setText( TootStatus.formatTime( status.time_created_at ) );
|
||||||
|
|
||||||
tvName.setText( status.account.display_name );
|
tvName.setText( status.account.display_name );
|
||||||
|
ivThumbnail.setCornerRadius( activity.density * 4f );
|
||||||
ivThumbnail.setImageUrl( access_info.supplyBaseUrl( status.account.avatar_static ), App1.getImageLoader() );
|
ivThumbnail.setImageUrl( access_info.supplyBaseUrl( status.account.avatar_static ), App1.getImageLoader() );
|
||||||
tvContent.setText( status.decoded_content );
|
tvContent.setText( status.decoded_content );
|
||||||
|
|
||||||
@ -363,7 +364,7 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setMedia( NetworkImageView iv, TootStatus status, int idx ){
|
private void setMedia( MyNetworkImageView iv, TootStatus status, int idx ){
|
||||||
if( idx >= status.media_attachments.size() ){
|
if( idx >= status.media_attachments.size() ){
|
||||||
iv.setVisibility( View.GONE );
|
iv.setVisibility( View.GONE );
|
||||||
}else{
|
}else{
|
||||||
@ -371,6 +372,7 @@ class ItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
|||||||
TootAttachment ta = status.media_attachments.get( idx );
|
TootAttachment ta = status.media_attachments.get( idx );
|
||||||
String url = ta.preview_url;
|
String url = ta.preview_url;
|
||||||
if( TextUtils.isEmpty( url ) ) url = ta.remote_url;
|
if( TextUtils.isEmpty( url ) ) url = ta.remote_url;
|
||||||
|
iv.setCornerRadius( 0f ); // 正方形じゃないせいか、うまく動かない activity.density * 4f );
|
||||||
iv.setImageUrl( access_info.supplyBaseUrl( url ), App1.getImageLoader() );
|
iv.setImageUrl( access_info.supplyBaseUrl( url ), App1.getImageLoader() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,222 @@
|
|||||||
|
package jp.juggler.subwaytooter.util;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
|
||||||
|
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.support.v7.widget.AppCompatImageView;
|
||||||
|
|
||||||
|
import com.android.volley.VolleyError;
|
||||||
|
import com.android.volley.toolbox.ImageLoader;
|
||||||
|
|
||||||
|
public class MyNetworkImageView extends AppCompatImageView {
|
||||||
|
/**
|
||||||
|
* The URL of the network image to load
|
||||||
|
*/
|
||||||
|
private String mUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resource ID of the image to be used as a placeholder until the network image is loaded.
|
||||||
|
*/
|
||||||
|
private int mDefaultImageId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resource ID of the image to be used if the network response fails.
|
||||||
|
*/
|
||||||
|
private int mErrorImageId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Local copy of the ImageLoader.
|
||||||
|
*/
|
||||||
|
private ImageLoader mImageLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Current ImageContainer. (either in-flight or finished)
|
||||||
|
*/
|
||||||
|
private ImageLoader.ImageContainer mImageContainer;
|
||||||
|
|
||||||
|
public MyNetworkImageView( Context context ){
|
||||||
|
this( context, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
public MyNetworkImageView( Context context, AttributeSet attrs ){
|
||||||
|
this( context, attrs, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public MyNetworkImageView( Context context, AttributeSet attrs, int defStyle ){
|
||||||
|
super( context, attrs, defStyle );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets URL of the image that should be loaded into this view. Note that calling this will
|
||||||
|
* immediately either set the cached image (if available) or the default image specified by
|
||||||
|
* {@link com.android.volley.toolbox.NetworkImageView#setDefaultImageResId(int)} on the view.
|
||||||
|
* <p>
|
||||||
|
* NOTE: If applicable, {@link com.android.volley.toolbox.NetworkImageView#setDefaultImageResId(int)} and
|
||||||
|
* {@link com.android.volley.toolbox.NetworkImageView#setErrorImageResId(int)} should be called prior to calling
|
||||||
|
* this function.
|
||||||
|
*
|
||||||
|
* @param url The URL that should be loaded into this ImageView.
|
||||||
|
* @param imageLoader ImageLoader that will be used to make the request.
|
||||||
|
*/
|
||||||
|
public void setImageUrl( String url, ImageLoader imageLoader ){
|
||||||
|
mUrl = url;
|
||||||
|
mImageLoader = imageLoader;
|
||||||
|
// The URL has potentially changed. See if we need to load it.
|
||||||
|
loadImageIfNecessary( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the default image resource ID to be used for this view until the attempt to load it
|
||||||
|
* completes.
|
||||||
|
*/
|
||||||
|
public void setDefaultImageResId( int defaultImage ){
|
||||||
|
mDefaultImageId = defaultImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the error image resource ID to be used for this view in the event that the image
|
||||||
|
* requested fails to load.
|
||||||
|
*/
|
||||||
|
public void setErrorImageResId( int errorImage ){
|
||||||
|
mErrorImageId = errorImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
float mCornerRadius;
|
||||||
|
|
||||||
|
public void setCornerRadius( float r ){
|
||||||
|
mCornerRadius = r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the image for the view if it isn't already loaded.
|
||||||
|
*
|
||||||
|
* @param isInLayoutPass True if this was invoked from a layout pass, false otherwise.
|
||||||
|
*/
|
||||||
|
void loadImageIfNecessary( final boolean isInLayoutPass ){
|
||||||
|
int width = getWidth();
|
||||||
|
int height = getHeight();
|
||||||
|
ScaleType scaleType = getScaleType();
|
||||||
|
|
||||||
|
boolean wrapWidth = false, wrapHeight = false;
|
||||||
|
if( getLayoutParams() != null ){
|
||||||
|
wrapWidth = getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||||
|
wrapHeight = getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the view's bounds aren't known yet, and this is not a wrap-content/wrap-content
|
||||||
|
// view, hold off on loading the image.
|
||||||
|
boolean isFullyWrapContent = wrapWidth && wrapHeight;
|
||||||
|
if( width == 0 && height == 0 && ! isFullyWrapContent ){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the URL to be loaded in this view is empty, cancel any old requests and clear the
|
||||||
|
// currently loaded image.
|
||||||
|
if( TextUtils.isEmpty( mUrl ) ){
|
||||||
|
if( mImageContainer != null ){
|
||||||
|
mImageContainer.cancelRequest();
|
||||||
|
mImageContainer = null;
|
||||||
|
}
|
||||||
|
setDefaultImageOrNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if there was an old request in this view, check if it needs to be canceled.
|
||||||
|
if( mImageContainer != null && mImageContainer.getRequestUrl() != null ){
|
||||||
|
if( mImageContainer.getRequestUrl().equals( mUrl ) ){
|
||||||
|
// if the request is from the same URL, return.
|
||||||
|
return;
|
||||||
|
}else{
|
||||||
|
// if there is a pre-existing request, cancel it if it's fetching a different URL.
|
||||||
|
mImageContainer.cancelRequest();
|
||||||
|
setDefaultImageOrNull();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the max image width / height to use while ignoring WRAP_CONTENT dimens.
|
||||||
|
int maxWidth = wrapWidth ? 0 : width;
|
||||||
|
int maxHeight = wrapHeight ? 0 : height;
|
||||||
|
|
||||||
|
// The pre-existing content of this view didn't match the current URL. Load the new image
|
||||||
|
// from the network.
|
||||||
|
ImageLoader.ImageContainer newContainer = mImageLoader.get( mUrl,
|
||||||
|
new ImageLoader.ImageListener() {
|
||||||
|
@Override
|
||||||
|
public void onErrorResponse( VolleyError error ){
|
||||||
|
if( mErrorImageId != 0 ){
|
||||||
|
setImageResource( mErrorImageId );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse( final ImageLoader.ImageContainer response, boolean isImmediate ){
|
||||||
|
// If this was an immediate response that was delivered inside of a layout
|
||||||
|
// pass do not set the image immediately as it will trigger a requestLayout
|
||||||
|
// inside of a layout. Instead, defer setting the image by posting back to
|
||||||
|
// the main thread.
|
||||||
|
if( isImmediate && isInLayoutPass ){
|
||||||
|
post( new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run(){
|
||||||
|
onResponse( response, false );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( response.getBitmap() != null ){
|
||||||
|
if( mCornerRadius > 0f ){
|
||||||
|
RoundedBitmapDrawable d = RoundedBitmapDrawableFactory
|
||||||
|
.create( getResources(), response.getBitmap() );
|
||||||
|
d.setCornerRadius( mCornerRadius );
|
||||||
|
setImageDrawable( d );
|
||||||
|
}else{
|
||||||
|
setImageBitmap( response.getBitmap() );
|
||||||
|
|
||||||
|
}
|
||||||
|
}else if( mDefaultImageId != 0 ){
|
||||||
|
setImageResource( mDefaultImageId );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, maxWidth, maxHeight, scaleType );
|
||||||
|
|
||||||
|
// update the ImageContainer to be the new bitmap container.
|
||||||
|
mImageContainer = newContainer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setDefaultImageOrNull(){
|
||||||
|
if( mDefaultImageId != 0 ){
|
||||||
|
setImageResource( mDefaultImageId );
|
||||||
|
}else{
|
||||||
|
setImageBitmap( null );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onLayout( boolean changed, int left, int top, int right, int bottom ){
|
||||||
|
super.onLayout( changed, left, top, right, bottom );
|
||||||
|
loadImageIfNecessary( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDetachedFromWindow(){
|
||||||
|
if( mImageContainer != null ){
|
||||||
|
// If the view was bound to an image request, cancel it and clear
|
||||||
|
// out the image from the view.
|
||||||
|
mImageContainer.cancelRequest();
|
||||||
|
setImageBitmap( null );
|
||||||
|
// also clear out the container so we can reload the image if necessary.
|
||||||
|
mImageContainer = null;
|
||||||
|
}
|
||||||
|
super.onDetachedFromWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void drawableStateChanged(){
|
||||||
|
super.drawableStateChanged();
|
||||||
|
invalidate();
|
||||||
|
}
|
||||||
|
}
|
@ -54,7 +54,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivReply"
|
android:id="@+id/ivReply"
|
||||||
android:layout_width="40dp"
|
android:layout_width="40dp"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
@ -119,7 +119,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia1"
|
android:id="@+id/ivMedia1"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -127,7 +127,7 @@
|
|||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia2"
|
android:id="@+id/ivMedia2"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -136,7 +136,7 @@
|
|||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia3"
|
android:id="@+id/ivMedia3"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -145,7 +145,7 @@
|
|||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia4"
|
android:id="@+id/ivMedia4"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivBackground"
|
android:id="@+id/ivBackground"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -39,7 +39,7 @@
|
|||||||
android:padding="12dp"
|
android:padding="12dp"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivAvatar"
|
android:id="@+id/ivAvatar"
|
||||||
android:layout_width="128dp"
|
android:layout_width="128dp"
|
||||||
android:layout_height="128dp"
|
android:layout_height="128dp"
|
||||||
|
@ -89,7 +89,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivFollow"
|
android:id="@+id/ivFollow"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
@ -197,7 +197,7 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivThumbnail"
|
android:id="@+id/ivThumbnail"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
@ -299,7 +299,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia1"
|
android:id="@+id/ivMedia1"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -309,7 +309,7 @@
|
|||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia2"
|
android:id="@+id/ivMedia2"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -320,7 +320,7 @@
|
|||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia3"
|
android:id="@+id/ivMedia3"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -331,7 +331,7 @@
|
|||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia4"
|
android:id="@+id/ivMedia4"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -88,7 +88,7 @@
|
|||||||
android:layout_marginBottom="4dp"
|
android:layout_marginBottom="4dp"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivFollow"
|
android:id="@+id/ivFollow"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
@ -194,7 +194,7 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivThumbnail"
|
android:id="@+id/ivThumbnail"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
@ -296,7 +296,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia1"
|
android:id="@+id/ivMedia1"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -306,7 +306,7 @@
|
|||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia2"
|
android:id="@+id/ivMedia2"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -317,7 +317,7 @@
|
|||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia3"
|
android:id="@+id/ivMedia3"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -328,7 +328,7 @@
|
|||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.volley.toolbox.NetworkImageView
|
<jp.juggler.subwaytooter.util.MyNetworkImageView
|
||||||
android:id="@+id/ivMedia4"
|
android:id="@+id/ivMedia4"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user